在新bash中更改bash提示符

时间:2012-04-16 17:15:19

标签: bash shell prompt

当我创建一个新的bash进程时,提示默认为一个非常简单的进程。 我知道我可以编辑.bashrc等来改变它,但有没有办法用bash命令传递提示符?

谢谢!

3 个答案:

答案 0 :(得分:8)

提示由PS1,PS2,PS3和PS4环境变量定义。所以,例如以下将启动一个新的bash,提示设置为“foo:”:

PS1="foo: " bash --norc

需要--norc来禁止处理初始化文件,这会覆盖PS1变量。

答案 1 :(得分:4)

我有同样的问题 - 我想从命令行启动临时bash;而大多数其他环境变量仍然存在;那些来自~/.bashrc的东西很难被覆盖 - 特别是如果你像我一样,实际上想要保留你已经拥有的~/.bashrc(以及内部的别名等) - 除了PS1提示。

以下内容对我有用(请注意--init-file--rcfile的同义词/别名):

bash --rcfile <(cat ~/.bashrc ; echo 'PS1="\[\033[0;33m\]\u@HELLO:\W\$\[\033[00m\] "')

基本上,括号/小于+括号成语<()启动bash进程替换;在括号内回显到stdout的所有内容都将以临时文件/dev/fd/<n>结束。所以我们先得出~/.bashrc的内容;然后我们只需在末尾添加一个PS1 set命令(有效地覆盖) - 这最终会在/dev/fd/<n>;然后bash使用/dev/fd/<n>作为新rcfile

这就是它的表现:

user@pc:tmp$ TESTVAR="testing" bash --rcfile <(cat ~/.bashrc ; echo 'PS1="\[\033[0;33m\]\u@HELLO:\W\$\[\033[00m\] "')
user@HELLO:tmp$ test-alias-tab-completion ^C
user@HELLO:tmp$ echo $TESTVAR 
testing
user@HELLO:tmp$ exit
exit
user@pc:tmp$ 

答案 2 :(得分:0)

您可以设置环境变量,然后在.bashrc中的提示符中使用该环境变量。