bash -c 完成后如何保留交互式 shell?

bash -c 完成后如何保留交互式 shell?

我有一个玩具脚本,可以打印出$SHLVLshell 调用设置:

$ cat tst.sh 
echo "Level: $SHLVL"
echo "Options: $-"

如果我source在当前 shell 中它会按预期工作:

$ source tst.sh 
Level: 1
Options: himBHs

如果它sourced在子 shell 中,也没什么太令人兴奋的:

$ /bin/bash
$ source tst.sh 
Level: 2
Options: himBHs

使用设置运行它-c给出了略有不同的输出:

$ /bin/bash -c 'source tst.sh'
Level: 2
Options: hBc

因此我提供了缺少的选项:

$ /bin/bash -sic 'source tst.sh'
Level: 2
Options: himBHcs

请注意,每次我sourced的脚本使用该-c设置时,完成脚本中的最后一个命令后,子 shell 都会退出。这是我想阻止的事情,因此在脚本中的最后一个命令之后我应该保留在interactive子 shell 中。

基本上我想复制以下步骤序列,但使用-c

$ /bin/bash
$ source tst.sh

答案1

也许比看起来更简单:

bash --init-file tst.sh

或者

bash --rcfile tst.sh

答案2

--init-file此基础上,您可以按 Up + Enter 重新运行历史记录中的命令:

echo 'pwd; ls' >/tmp/hist
HISTFILE=/tmp/hist bash --init-file /tmp/hist

相关内容