2016-02-05 82 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