我的 bash 提示符当前配置的方式是显示当前目录的完整路径。当我深入目录树时,这很烦人,因为提示符变得太长,以至于每个命令都会换行到下一行。如何让它只显示路径的最后一部分?
这是我所拥有的.bashrc
:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
;;
*)
;;
esac
答案1
\w
将(小写)更改为\W
(大写):
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
^^
this one waaaaaay over here ------------------------------------------------+
看看Bash 提示符操作指南有很多有趣的细节。例如:
user@host:/usr/local/bin$ echo $PS1
${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$
user@host:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ '
user@host:bin$
如果设置了该PROMPT_COMMAND
变量,则该命令将在显示 中指定的提示之前运行PS1
。在您的例子中,PROMPT_COMMAND
运行echo
带有特定ANSI 转义序列那操作 Xterm 的标题栏。
如果您怀疑您的PROMPT_COMMAND
操作覆盖了PS1
提示,您可以unset
执行此操作并进行测试:
$ unset PROMPT_COMMAND
最后,请确保您正在更改PS1
实际使用的定义。常见位置是、、、、。/etc/bash.bashrc
系统文件通常(但并非总是)在用户文件之前运行。/etc/profile
~/.bashrc
~/.bash_profile
~/.profile
答案2
简单的 bash 替换命令是
${VAR/pattern_to_find/pattern_to_replace}
为了显示最后一个目录,您只需执行${PWD/*\//}
,即找到最后一个“ ”之前的任何内容(包括最后一个“ /
”)并将其替换为任何内容。
在我的 ubuntu 机器上我使用:
export PS1='$(whoami):${PWD/*\//}#'.
答案3
我的解决方案是,当目录超过 5 个时,显示前 3 个和后 2 个目录
所以我的提示(其中也包含其他信息)如下所示:
08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/rails/everquote
当我的密码实际上是
/home/durrantm/Dropbox/93_2016/work/code/ruby__rails/rails/everquote
我的 PS1 提示设置如下:
HOST='\[\033[02;36m\]\h'; HOST=' '$HOST
TIME='\[\033[01;31m\]\t \[\033[01;32m\]'
LOCATION=' \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
git_branch
是一个显示当前 git 分支的函数,我将其保存在我的点文件中,它是:
git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
答案4
我相信这个选项更容易,只需执行以下操作:
echo $PWD | rev | cut -d '/' -f 1 | rev
因此将其分配给 .bashrc 文件中的 PS1 变量:
PS1='$(PWD | rev | cut -d '/' -f 1 | rev)'