如何在bash提示中显示绝对路径?


50

我目前将bash PS1设置为以下形式:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

如何使它显示绝对路径而不是相对路径(例如/home/dave/dir而不是~/dir)?


1
/home/dave/dir并且~/dir都是绝对路径,第二个在您的主目录中使用缩写。相对路径是对于当前目录(例如../dir)而不是从根目录(/)开始的路径。
道格·哈里斯

3
ps很好地使用颜色来指示上一个命令的退出状态。我喜欢的提示中可能是第一次使用颜色。
道格·哈里斯

@道格·哈里斯:谢谢你的指正。我也喜欢这种颜色。不记得我最初在哪里看到的(也许在以前的SU帖子中?)
David B 2010年

\u@\H[\w]:~\$品牌user@host[~/path]:~$
JREAM

Answers:


49

只需替换\w\$PWD

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

无论如何,如果您介意一些小技巧,我会写一些类似的内容:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '

4
我也想到了这一点,但是$PWD在分配给时评估PS1,而不是在每次调用时进行评估。但是,如果您逃脱了美元符号,它将起作用- \$PWD。这样,美元符号就是分配时的美元符号,并且变量评估会在每个提示时发生。+1给你。
道格·哈里斯

没错,\,我通常会使用单引号。谢谢。
cyrus

+1谢谢!您能否在漂亮的bash行(“提示”行)中解释魔术?
David B

当然。为了提高可读性和可移植性,我使用了tput(有关更多信息,请参见man tput)来更改颜色,而不是直接编写控制字符。另外,我通过使用单引号删除了双引号和反斜杠。最后,通过使用变量,我避免了一些冗余。
cyrus



0

Humm〜/ dir是绝对路径,但使用“快捷方式”。例如,如果您这样做,cd /usr/local提示符很可能会显示/ usr / local的完整路径。因此,无论如何,您已经有了完整的路径:-)

但是,您可能正确的问题是如何显示完整的路径,而没有〜之类的快捷方式?

但是,我不知道那个答案,看着那个男人,似乎确实有一个答案(至少有文献记载)。


0

运行pwd而不是使用\W

简单版本:

export PS1="\`pwd\` $ "

在您的代码中使用它:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "

1
次要点:根据Google的bash样式指南,宁可使用$(pwd)而不使用反引号,因为反引号在嵌套时需要转义,而$()则不需要。
funroll
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.