如何更改subshel​​l的提示


8

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

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

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

$#默认的shell
$ ./myscript
(myscript)的$#子shell
(myscript)的$退出
$

我尝试更改PROMPTPS1,但这些都不起作用。我怎样才能做到这一点?

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



不完全是重复的问题,bash仅是其他问题。
斯特凡Chazelas

确实看起来像是正确的副本;-(
雏菊

Answers:


7

我认为您可以使用不同的提示创建子shell,如下所示:

$ bash --rcfile <(echo "PS1='subshell prompt: '") -i

当前环境:

$ bash --rcfile <(echo "PS1='subshell prompt$ '") -i

在子外壳中:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

返回原始外壳:

$ 

1
您可以使用a here string代替流程替代。例如<<< "PS1..."
jordanm

1
@jordanm-您能举个例子吗?我搞砸了,但是无法使用此处的字符串得到一个有效的示例。
slm

2

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

您可能要检查外壳程序的选项以加载自定义配置文件(例如:--rcfile在Bash IINM中),并使用这些选项以及\env传递所需的环境变量。问题在于,一旦执行该操作,则触发子外壳将取决于外壳。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.