当我创建一个新的 bash 进程时,提示默认为一个非常简单的。我知道我可以编辑 .bashrc 等来改变它,但是有没有办法用 bash 命令传递提示?
谢谢!
提示由 PS1、PS2、PS3 和 PS4 环境变量定义。因此,例如以下将启动一个新的 bash,提示设置为“foo:”:
PS1="foo: " bash --norc
--norc
需要抑制初始化文件的处理,这将覆盖变量PS1
。
我有同样的问题 - 我想从命令行启动一个临时 bash;并且大多数其他环境变量仍然存在;那些来源~/.bashrc
的东西很难覆盖——特别是如果你像我一样,真的想保留~/.bashrc
你已经拥有的东西(和里面的别名等)——除了PS1
提示。
这是对我有用的东西(注意这--init-file
是 的同义词/别名--rcfile
):
bash --rcfile <(cat ~/.bashrc ; echo 'PS1="\[\033[0;33m\]\u@HELLO:\W\$\[\033[00m\] "')
基本上,方括号/小于 + 括号习语<()
启动bash
进程替换;括号内回显到标准输出的所有内容都将在一个临时文件中结束,/dev/fd/<n>
. 所以我们首先 cat 出来的内容~/.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$
您可以设置一个环境变量,然后在 .bashrc 中的提示符中使用该环境变量。