如何避免在Bash提示中出现波浪号〜?


12

我想从显示在PS1变量中的波浪号中删除。

我当前的PS1字符串:

PS1="\h:\w\n$"

提示如下:

lnx-hladky:/tmp/plugtmp
$

我不喜欢$ HOME目录显示为波浪号。可以避免吗?

它会引起问题,例如:

lnx-hladky:~/DOC
$  

文档说:

\w : the current working directory, with $HOME abbreviated with a tilde 
\W: the basename of the current working directory, with $HOME abbreviated with a tilde

有没有可能避免$ HOME用代字号缩写?

我找到了一种解决方法,但是我觉得它太复杂了:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

谁能提出更好的解决方案?我觉得运行这么多命令只是为了获得提示并不是很好。(日期,whoami,主机名,pwd)。


代字号在示例中引起什么“问题”?
JBallin '18

Answers:


11

bash在提示符下运行扩展;只要确保逃脱它们即可。

PS1='\h:$(pwd)\n$'

那回答了我的问题。我不知道有这种可能性。非常感谢,Ignacio!
Jirka,

2
@Jirka:您也可以使用:PS1 ='\ h:$ PWD \ n $'。
暂停,直到另行通知。

1
Jirka的解决方案pwd在每个提示上执行。Dennis的解决方案不只是获取环境变量PWD,而PWD便宜得多。
斯特凡纳·古里科

2
pwd是内置的bash。断言${PWD}$(pwd)没有证据“便宜得多” 。
Vineet 2014年

1
@anxieux:您必须使用单引号而不是双引号
weberjn

0

您不需要运行示例中显示的命令。bash提供您提到的大多数内容的快捷方式。

你的例子:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

可以改写为:

PS1='\e[4;35m\t\e[24m\u@\h:\w\e[m\n'

其中\t显示时间(24小时格式),\u显示当前用户名,“ \ h”显示主机名- bash手册页讨论了这些内容以及提示中可用的其他转义符

即使将展开~为完整路径,如果您不知道哪个用户正在运行该命令并且要定期切换用户,也可能会在文件权限或可执行文件权限方面造成问题。


嗨,我的意图是将\ w替换为完整路径,包括FULL $ HOME路径。多亏了Ignacio,我现在使用的是PS1 ='\ e [4; 35m \ t \ e [24m \ u @ \ h:$(pwd)\ e [m \ n $'],它解决了我的问题:-)
耶尔卡(Jirka)

完美-我喜欢加入,\u这样我就知道自己是谁。不要忘记接受Ignacio的回答-单击问题左侧的复选框。
Doug Harris

感谢您的提示。我是这个论坛的新手。这是一个好地方。
Jirka

\ u @ \ h:$ PWD(注意冒号)可以用作scp的输入
weberjn 2016年

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.