2016-02-05 157 views
4

如何运行嵌套的shell脚本使用相同的选项?例如,的Unix shell脚本:通过shell选项(-x等),以嵌套的脚本

parent.sh

#!/bin/sh 
./child.sh 

child.sh

#!/bin/sh 
ls 

如何修改parent.sh这样,当我与sh -x parent.sh运行它时,-x选项是有效的child.sh以及与执行我的控制台上显示ls

我正在寻找一个便携的解决方案是有效的极少数情况下,例如系统用户/bin/false作为其注册的壳。 $SHELL环境变量会有帮助吗?

说明:我有时想打parent.sh-x,有时与-e,这取决于具体情况。所以解决方案不得涉及对标志进行硬编码。

回答

1

如果使用bash,我可以提出以下建议:

#!/bin/bash 
export SHELLOPTS 
./child.sh 

,您可以根据需要多次传播,也可以在每个脚本中使用echo $SHELLOPTS下了线,看看发生了什么,以及如何如果你需要更好地理解选项,选项会被传播。

/bin/sh它将失败,因为/bin/sh: SHELLOPTS: readonly variable如何POSIX在各种系统上执行/bin/sh,这里更多的信息:https://lists.gnu.org/archive/html/bug-bash/2011-10/msg00052.html

1

它看起来像一个黑客,似乎这不是最好的办法。
但它会做详细的你想要什么

的方法之一,你如何能做到这一点 - 这是为sh创建别名来创建包装:

alias saveShell='cp /bin/sh $some_safe_place' 

alias shx='cp $some_safe_place /bin/x_sh; rm /bin/sh; echo "/bin/x_sh -x [email protected]" > /bin/sh; chmod 755 /bin/sh ' 

alias she='cp $some_safe_place /bin/e_sh; rm /bin/sh; echo "/bin/e_sh -e [email protected]" > /bin/sh; chmod 755 /bin/sh ' 
alias restoreShell='cp $some_safe_place /bin/sh' 

如何使用:
运行saveShell,然后使用shxshe,如果您要更改-x上的-e运行restoreShell,然后运行shxshe 运行脚本通常 SH ./parent.sh

BE WITH MOVING SH

其他解决方案 在所有的SH文件与sed替换#!/bin/sh#!/bin/sh -x#!/bin/sh -e运行脚本时要特别注意。

+0

我很喜欢你的文章这么多:-) – nodakai