我有一个玩具脚本,可以打印出$SHLVL
shell 调用设置:
$ 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