Unix shell 脚本:将 shell 选项(-x 等)传递给嵌套脚本

nod*_*kai 5 unix linux bash shell posix

如何使用相同的选项运行嵌套的 shell 脚本?例如,

parent.sh

#!/bin/sh
./child.sh
Run Code Online (Sandbox Code Playgroud)

child.sh

#!/bin/sh
ls
Run Code Online (Sandbox Code Playgroud)

如何修改,parent.sh以便当我使用 运行它时sh -x parent.sh,该-x选项也有效child.sh并且 的执行ls显示在我的控制台上?

我正在寻找一种便携式解决方案,该解决方案对极少数情况有效,例如系统用户/bin/false将其注册为 shell。请问$SHELL环境变量是任何帮助吗?

说明:我有时想parent.sh-x,有时用-e,视情况而定。因此,解决方案不得涉及对标志进行硬编码。

Nic*_*lae 3

如果您使用bash,我可以推荐以下内容:

#!/bin/bash
export SHELLOPTS
./child.sh
Run Code Online (Sandbox Code Playgroud)

您可以根据需要多次传播,echo $SHELLOPTS如果您需要更好地理解它,您也可以在每个脚本中使用来查看正在发生的情况以及选项如何传播。

但由于POSIX 在各种系统中的强制执行方式不同,/bin/sh它会失败,更多信息请参见: https: //lists.gnu.org/archive/html/bug-bash/2011-10/msg00052.html/bin/sh: SHELLOPTS: readonly variable/bin/sh