age*_*ser 113 linux bash command-line bashrc
我的 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
Run Code Online (Sandbox Code Playgroud)
qua*_*ote 148
将\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 ------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
查看Bash Prompt HOWTO了解许多有趣的细节。例子:
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$
Run Code Online (Sandbox Code Playgroud)
该PROMPT_COMMAND变量(如果设置)是在显示 中指定的提示之前运行的命令PS1。在你的情况下,PROMPT_COMMAND运行的echo某些语句ANSI转义序列是操纵的xterm的标题栏。
如果您怀疑您PROMPT_COMMAND的PS1提示覆盖了您的提示,您可以unset对其进行测试:
$ unset PROMPT_COMMAND
Run Code Online (Sandbox Code Playgroud)
最后,请确保您正在更改PS1实际使用的定义。常见位置有/etc/bash.bashrc、/etc/profile、~/.bashrc、~/.bash_profile、~/.profile。系统文件通常(但不总是)在用户文件之前运行。
小智 27
简单的 bash 替换命令是
${VAR/pattern_to_find/pattern_to_replace}
Run Code Online (Sandbox Code Playgroud)
为了显示最后一个目录,您可以只做${PWD/*\//},即在包括最后一个“ /”之前找到任何内容并将其替换为空。
在我的 ubuntu 机器上,我使用:
export PS1='$(whoami):${PWD/*\//}#'.
Run Code Online (Sandbox Code Playgroud)
我的解决办法是当超过5个目录时显示前三个和后2个目录
所以我的提示(也有其他信息)看起来像:
08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/rails/everquote
Run Code Online (Sandbox Code Playgroud)
当我的密码实际上是
/home/durrantm/Dropbox/93_2016/work/code/ruby__rails/rails/everquote
Run Code Online (Sandbox Code Playgroud)
我的 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
Run Code Online (Sandbox Code Playgroud)
git_branch 是一个显示当前 git 分支的函数,我将它保存在我的 dotfiles 中,它是:
git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134186 次 |
| 最近记录: |