我有一个玩具脚本,它打印出$SHLVL
和 shell 调用设置:
$ cat tst.sh
echo "Level: $SHLVL"
echo "Options: $-"
如果我source
在当前的 shell 中它可以按预期工作:
$ source tst.sh
Level: 1
Options: himBHs
如果它sourced
在子外壳中,那么再没有什么太令人兴奋的了:
$ /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
设置的脚本时,在脚本中的最后一个命令完成后,子外壳程序就会退出。这是我想阻止的事情,因此在脚本中的最后一个命令之后,我应该保留在interactive
子 shell 中。
基本上我想复制以下步骤序列,但使用-c
:
$ /bin/bash
$ source tst.sh
也许比看起来更简单:
或者