在Bash父Shell中更改PS1提示符

4
使用脚本,我需要更改父Bash shell的提示符。我尝试了以下方法:
PS1="Hello World > "

这会改变脚本运行的子shell的提示符,但是我应该使用哪个命令来改变父shell的提示符呢?有什么想法吗?


3
如果没有父进程的配合,子进程就无法改变其父进程。根据你的例子,似乎你主要是想搞清楚这一点。如果是这样的话,你现在已经完成了。如果你需要解决问题,也许你可以安排父进程进行配合,比如使用 PS1=$(subshell commands ...) - tripleee
你应该明确说明你想要实现什么,而不是如何去实现它。这样我们才能更好地理解你的意图,并帮助你找到正确的解决方案。 - phemmer
我希望将命令提示符更改为“Hello World >”,但如果可能的话,我不希望它是永久性的。 - batsta13
3个回答

6
在所有情况下,父Shell必须配合。在Unix环境下,子进程无法在没有父进程的配合下影响其父进程。
在子Shell脚本changePrompt.sh中尝试此操作:
echo 'PS1="Hello World > "'

然后在父shell中这样调用脚本:

eval "$(changePrompt.sh)"

或者,采用一种不同的方式:通过源代码调用脚本而非直接调用。 changePrompt.sh:
PS1="Hello World > "

这样调用:

source changePrompt.sh

或者简单地说:
. changePrompt.sh

1

你需要编辑 .bash_rc 文件,加入你想要的内容... 直接添加 PS1="blah" 或其他内容即可。

.bash_rc 文件应该在你的主目录 /user/home 中(它是隐藏的,所以用 "ls -la" 命令查看)

当你编辑完毕后,使用 source 命令使其生效(source .bash_rc)-- 假设在同一目录下

如果这样不起作用,请尝试 .rc 文件... 这将对所有 shell 生效(或者至少应该如此)... 请参阅以下链接获取更多信息:

http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html --- here


我必须能够在脚本中更改父Shell的提示符。 - batsta13
请更具体地说明,您指的是父Shell?根Shell?还是您登录时的第一个Shell? - Ryan
当您首次打开终端时,您会得到的外壳。 - batsta13

0

别名(在您的~/.bashrc~/.bash_aliases中)也是一个不错的方法,如果只是为了方便地偶尔更改提示符...

alias miniprompt="PS1='\[\e[32;1m\]$>\[\e[0m\]'"
alias fullprompt="PS1='\u\[\e[34;1m\]@\[\e[36;1m\]\H \[\e[34;1m\]\w\[\e[32;1m\] $ \[\e[0m\]'"

enter image description here


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