在bash提示中仅显示当前目录和父目录

特瓦尔鲍姆

我是bash的新手,希望我的提示显示tcsh中的内容不重要,但是经过良好的google搜索,我仍然无法执行。

我希望提示符仅包括当前目录和父目录,如下所示:

/parent/currentdir $

在tcsh中,这可以通过以下方法实现:

set prompt = "%C2 %"

但是到目前为止,在bash中,我仅发现必须解析pwd才能获得相同的输出。

有没有更简单的方法,例如:

export PS1="$(some_command) $" 
吉勒斯“别再邪恶了”

Bash的提示控制功能相当静态。如果需要更多控制,可以在提示中包括变量。确保您没有关闭该promptvars选项

PS1='${PWD#"${PWD%/*/*}/"} \$ '

请注意单引号:变量扩展必须在显示提示时发生,而不是在PS1定义变量时发生

如果要对显示的内容进行更多控制,可以使用命令替换。例如,上面的代码段丢失~了主目录缩写。

PS1='$(case $PWD in
        $HOME) HPWD="~";;
        $HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
        $HOME/*) HPWD="~/${PWD##*/}";;
        /*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
        *) HPWD="$PWD";;
      esac; printf %s "$HPWD") \$ '

这段代码很繁琐,因此PS1您可以使用PROMPT_COMMAND变量来运行代码进行设置HPWD,然后在提示符下使用它,而不是将其粘贴到变量中。

PROMPT_COMMAND='case $PWD in
        $HOME) HPWD="~";;
        $HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
        $HOME/*) HPWD="~/${PWD##*/}";;
        /*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
        *) HPWD="$PWD";;
      esac'
PS1='$HPWD \$'

由于缩短的提示仅在目录更改时才更改,因此您不需要在每次显示提示时都重新计算它。Bash不提供在当前目录更改上运行的挂钩,但是您可以通过覆盖及其表亲模拟它cd

cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
  case $PWD in
    $HOME) HPWD="~";;
    $HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
    $HOME/*) HPWD="~/${PWD##*/}";;
    /*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
    *) HPWD="$PWD";;
  esac
}
PS1='$HPWD \$'

请注意PS1,由于它是一个shell设置,而不是环境变量,因此您不需要,也不需要export bashPS1设置不会被其他shell理解。

PS如果您希望获得良好的交互式Shell体验,请切换到zsh,其中所有这些(%主要扩展包括tcsh的扩展chpwd,等等)都是本机功能。

PS1='%2~ %# '

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何更改PowerShell提示符以仅显示父目录和当前目录?

在bash提示符下仅显示当前目录名称(不是完整路径)

如何更改终端标题和提示路径以仅显示当前工作目录的名称?

在Windows CMD提示中仅显示当前目录名称(而不是完整路径)

C程序在目录中打印目录名称,并排除当前目录和父目录

当前目录,父目录和根目录的路径

chmod 仅当前目录中的文件,而不是子目录和主目录中的文件

使“覆盖率报告”仅显示当前目录中的文件?

在Bash中获取目录的父目录

更改命令提示符以仅显示当前目录名称

使用Git Bash显示当前目录中的文件?

如何将终端提示更改为仅当前目录?

仅列出当前目录中的文件

grep仅当前目录

仅列出当前目录中的常规文件(但不列出目录)

如何在Linux中配置命令提示符以显示当前目录?

如何在ipython提示符下显示当前目录

如何在PowerShell中显示当前目录?

从Python脚本获取当前目录的父目录

rm -rf *是否从当前目录或父目录/根目录中递归删除文件?

当前 (.) 和父 (..) 目录的技术术语是什么?

.bash_profile PS1以显示当前目录文件夹和$ MAC osx

在Bash中仅使用ls列出目录?

如何仅循环浏览bash中的目录?

如何使用grep在当前目录中搜索具有字符串“ hello”但仅显示.h和.cc文件的所有文件?

nerdtree和当前目录

在Ubuntu中设置终端提示以仅显示工作目录名称,而不显示其完整路径

如何让tmux告诉bash在新打开的Windows中显示当前目录的*逻辑*版本?

从目录和子目录中仅获取重复文件