如何缩短我的命令行(bash)提示符?

目前是:
michael@Castle2012-Ubuntu-laptop01:~/Dropnot/webs/rails_v3/linker/spec/controllers$

除了重新命名我的机器和目录结构之外...
我该如何使它变得更像这样:
michael:controllers$

http://askubuntu.com/questions/816068/how-to-shorten-your-command-line-promptbash-like-spatry-does-it - nazar2sfive
7个回答

仅更改当前终端实例的方法

只需输入PS1='\u:\W\$ '并按回车键。


要永久更改它

在你的~/.bashrc文件中,找到以下部分:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

删除@\h,并将\w替换为大写的\W,使其变为:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u:\W\$ '
fi

保存、退出,关闭终端并重新打开一个终端以查看结果。


更多选项!

  • 要了解更详细的说明以及更多选项,请点击这里
  • 如果您想使用一个简短的Python脚本来设置提示符,以便只在您深入目录结构时进行缩短,请查看这个答案

1你还可以获得很多信息...然后在末尾换行,就像http://unix.stackexchange.com/q/88780/10043中的那样。 - Michael Durrant
有没有办法让这个设置全局生效?换句话说,如果我切换到另一个用户身份(使用sudo),可以让这个设置保留下来,但只对我自己有效(也就是说,其他用户在正常使用他们的账户时不受影响)? - ctote
为了拥有一个能在Linux和OSX上都运行的共享.bashrc文件,我已经转向使用http://unix.stackexchange.com/a/127800/10043。 - Michael Durrant
HOST='\033[02;36m]\h' HOST=' '$HOST parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* (.*)/\1/'; } 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]$(parse_git_branch)[\033[00m]\n$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2='[\033[01;36m]>' - Michael Durrant
但请参见答案以获取实际使用的代码。 - Michael Durrant
你要怎么撤销这个操作?假设我在shell中运行了PS1='\u:\W$ ',那么我应该输入什么来恢复更长的命令提示符行呢? - Andi Jay
更多信息请参见:https://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html - Radix
这在我的Ubuntu 16.04上没有起作用。 - Karim Samir
在Ubuntu 16.04上对我来说完美运行。 - Mayeenul Islam
你可能不想使用 \[\]。使用 \001\002 似乎可以防止在较长的行上打断提示符:https://stackoverflow.com/questions/24839271/bash-ps1-line-wrap-issue-with-non-printing-characters-from-an-external-command/24840720#24840720 - phil294
顺便说一下,这个代码片段 PS1='\u:\W\$ ' 在我的 Mac OS 上也起作用。 - Mig82

在当前终端中运行此代码。
PROMPT_DIRTRIM=3

现在bash提示符只会显示最后3个目录名。您可以选择1来仅显示当前目录。更多信息请参阅GNU文档中的链接
效果如下:
/var/lib/apt/lists# PROMPT_DIRTRIM=3
/.../lib/apt/lists# 

如果你想要永久生效,可以在~/.bashrc文件的开头添加以下一行代码:
PROMPT_DIRTRIM=3

或者另一个大于零的数字。

8只是一点小提示:这需要Bash 4。 - Stefan Lasiewski
1很好,我添加了一个别名 promptdir()(带有一个函数){ PROMPT_DIRTRIM=$1; },只是为了让生活更轻松... - dgoosens
1有没有办法只裁剪中间的目录,即保留第一个目录和最后一个目录?例如:/var/.../lists# - Prashant Adlinge

这是我首选的提示设置:
~/.bashrc中添加。
PS1='[\u@\h \W]\$ '    

看起来是这样的:
[user@hostname dirname]$

(在$符号后面加一个空格)

这个 PS1='\[\033[01;34m\][\u @ \h \W]\[\033[00m\]\$ ' 怎么样,但是在每个单词之间加上空格看起来有点丑... - Ng Sek Long
非常有用,非常感谢! - Siwei

个人而言,我更喜欢在bash提示符中只显示当前文件夹。我可以使用以下命令来实现这一点:
PS1='\W\$ '

如果你希望每次启动后都生效,那么请将上述命令添加到你的~/.bashrc文件中。

我知道这个问题很旧,但由于没有人建议创建一个别名,所以我决定发帖。使用Bash Prompt Escape Sequences,我创建了一个别名shorten
~/.bash_aliases中,你会注意到$Blue变量用于设置提示符的颜色,你可以根据喜好省略或更改它,当调用shorten时,我还清除终端。
alias c='clear'

alias shorten='PS1="$Blue$USER:\W$ "&& c'

为了实现OP所希望的提示字符串:
alias shorten='PS1="$USER:\W$ "'

我在~/.bashrc中定义了颜色,从https://wiki.archlinux.org/index.php/Color_Bash_Prompt复制并粘贴过来。顺便问一下,ansi代码颜色是怎么回事?看着就让我困惑。
Blue='\e[0;34m'         # Blue

一个逐步指南对我来说会非常有用,因为我不知道如何进入.bash_aliases文件。谢谢。 - Kayote
2"."前缀表示隐藏目录或文件。波浪符""是$HOME变量的简写形式。因此,"/.bash_aliases"只是"/home/$USER/.bash_aliases"的简写形式。要打开".bash_aliases",您可以打开终端并键入"gedit /home/$USER/.bash_aliases"或"gedit ~/.bash_aliases",或在您的主目录中按下ctrl-h以显示隐藏文件,并直接打开文件。希望这能有所帮助。您也可以通过谷歌搜索有用的别名。 - Allie Carver

写了一个函数,你可以根据需要进行修改:

function termprompt() {
    PS1="${PS1//@\\h/}"     # Remove @host
    PS1="${PS1//\\w/\\W}"   # Change from full directory to last name
}

将此函数放置在或靠近完全计算出~/.bashrcPS1行的底部。
每当您想要缩短提示符或者希望从~/.bashrc的底部调用termprompt以实现永久性时,您可以键入termprompt
与其他许多答案相比,这种技术的优势在于.bashrc可以以四种不同的方式设置PS1(xterm+无颜色、xterm+彩色、无xterm+无颜色、无xterm+彩色)。此答案支持所有四种当前方法,可能也支持未来的方法。
另一个优点是,这种方法具有更少复杂的控制代码,以便插入您的更改。

根据我在这篇帖子中找到的答案,我制作了一个我更喜欢使用的模板。我还在命令中包含了颜色。
它看起来像这样:
[ folder ]$ Command

为了测试当前终端实例

PS1='\[\033[01;34m\][ \W ]\[\033[00m\]$ '

为了使其在每个终端实例中都保持永久有效
echo "PS1='\[\033[01;34m\][ \W ]\[\033[00m\]\$ '" >> ~/.bashrc