我正在尝试创建一个简单的脚本,除其他外,该脚本将创建一个子 shell:
#!/bin/sh
# setup
"${@:-$SHELL}"
# teardown
问题是:我需要更改默认提示,例如:
$ # 默认 shell
$ ./myscript
(myscript) $ # 子 shell
(myscript) $ exit
$
我尝试改变PROMPT
和PS1
,但这些都不起作用。我怎样才能做到这一点?
PS:如果可能的话,我需要一个可以在 Bash 和 ZSH 上运行的解决方案。
答案1
我认为您可以创建一个具有不同提示的子 shell,如下所示:
$ bash --rcfile <(echo "PS1='subshell prompt: '") -i
例子
当前环境:
$ bash --rcfile <(echo "PS1='subshell prompt$ '") -i
在子外壳中:
subshell prompt$ echo hi
hi
subshell prompt$ exit
exit
回到原来的外壳:
$
答案2
它不起作用的原因可能是因为当您加载外壳程序(应该是例如:)时/bin/bash
,它最终会重新加载其配置文件,其中包括提示符的环境变量(例如$HOME/.bashrc
:)后传递您想要的环境变量 - 因此您的变量被丢弃。
您可能需要检查 shell 的选项来加载自定义配置文件(例如:--rcfile
在 Bash IINM 中)并使用这些选项以及\env
传递所需的环境变量。问题是,一旦执行此操作,子 shell 就会变得依赖于 shell。
(买者自负:我还不认为这是一个答案 - 特别是,我还没有在我的系统中尝试过任何这些。)