如何更改子shell的提示

Luc*_*aio 8 bash prompt zsh

我正在尝试创建一个简单的脚本,除其他外,它将创建一个子shell:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown
Run Code Online (Sandbox Code Playgroud)

问题是:我需要更改默认提示,例如:

$ # 默认shell
$ ./myscript
(myscript) $ # subshel​​l
(myscript) $ exit
$

我试图改变PROMPTand PS1,但这些都不起作用。我怎样才能做到这一点?

PS.:如果可能的话,我需要一个适用于 Bash 和 ZSH 的解决方案。

slm*_*slm 7

我认为您可以创建一个具有不同提示的子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)


Lui*_*uca 2

它不起作用的原因可能是因为当您加载外壳程序(应该是例如:)时/bin/bash,它最终会重新加载其配置文件,其中包括提示符的环境变量(例如$HOME/.bashrc:)在传递您想要的环境变量 - 因此您的变量将被丢弃。

您可能需要检查 shell 的选项来加载自定义配置文件(例如:--rcfile在 Bash IINM 中)并使用这些选项以及\env传递所需的环境变量。问题是,一旦执行此操作,子 shell 就会变得依赖于 shell。

请注意:我还不认为这是一个答案 - 特别是,我还没有在我的系统中尝试过任何这些。)