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