在新的bash中更改bash提示符

7
当我创建一个新的bash进程时,提示符默认为非常简单的一个。 我知道可以编辑.bashrc等文件来更改这个设置,但是有没有一种方法可以通过bash命令传递提示符? 谢谢!

你可以在 ~/.bashrc 中设置 PS1 - another.anon.coward
仅添加我的问题陈述,因为我在查找时遇到了困难:“在命令行中覆盖bash启动时的PS1”; 还相关[执行自定义init脚本以用于bash --login -i,例如从快捷方式更改为自定义目录 - Stack Overflow](https://dev59.com/XFTTa4cB1Zd3GeqPw-2r) - sdaau
4个回答

12

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

PS1="foo: " bash --norc

--norc是必需的,以抑制处理初始化文件,这些文件会覆盖PS1变量。


如果你在 .bash_profile 中定义 PS1 而不是 .bashrc,甚至不需要使用 "--norc" 选项。 - glenn jackman
1
谢谢!@glennjackman:我不想在每个shell中都有它,我想要一个可以调用的测试环境。当我在这个测试环境中时,提示应该表明这一点。 - Jonny5
如果你有类似于 Git 知情的提示符,你还需要确保 PROMPT_COMMAND 是空的。 - Aaron D. Marasco

4
我有同样的问题 - 我想从命令行启动一个临时的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设置命令(实际上是覆盖),这最终会存储到/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$ 

0

你可以设置一个环境变量,然后在 .bashrc 中使用该环境变量来定制你的提示符。


0
如果您想要配置文件,但不想在代码中硬编码所有可能的路径以从中获取它们,则更通用且与Shell无关的解决方案是:
PROMPT_COMMAND='PS1="(customize) $PS1"; PROMPT_COMMAND=' $SHELL

有一个警告,只有在默认配置文件没有设置PROMPT_COMMAND时才能工作。但这比它们不设置PS1更有可能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接