[英]Bash commands work on cmd line but not in script
我有一組在命令行上工作的管道命令,但是在腳本中運行時不會產生輸出。
該命令是:
STRNG=$( ip mroute show | tr -d "()," | awk ' {print "/usr/sbin/smcroute -a eth3", $1, $2, "vtun0 vtun1"}' ); echo "$STRNG"`
輸出為:
/usr/sbin/smcroute -a eth3 192.0.1.19 224.1.1.1 vtun0 vtun1
/usr/sbin/smcroute -a eth3 192.0.1.18 224.1.1.1 vtun0 vtun1
但是,如果將相同的命令行放入腳本中,則echo "$STRNG"
命令不會得到任何輸出。
我想做的是將$STRNG
中的每一行作為命令執行,但是無論出於什么原因, $STRNG
似乎都沒有在腳本中包含任何文本,而$STRNG
運行時$STRNG
確實包含了文本。 我敢肯定這是由於對bash的了解有限。
有人可以幫我嗎?
管道中的命令之一是別名嗎? 如果是這樣,您需要做
shopt -s expand_aliases
為了讓bash在腳本中擴展它。...通常,默認情況下,僅在交互式shell中啟用此功能。
正如Scharron所說,用sh -x運行它。 除此之外:
我將它分成較小的部分進行調試。
即,首先具有執行此操作的腳本:
ip mroute show
運行腳本。 如果那產生了產出,那么就增加更多。
ip mroute show | tr -d "(),"
ip mroute show | tr -d "()," | awk ' {print $0 } '
ip mroute show | tr -d "()," | awk ' {print "/usr/sbin/smcroute -a eth3", $1, $2, "vtun0 vtun1"}'
我要感謝大家的幫助-這些將是將來需要的好東西。
我的腳本的第一行與命令行不同:
/usr/sbin/smcroute -k; /usr/sbin/smcroute -d
事實證明,每次從ip mroute show獲得的結果都是不同的,可能是因為多播數據包尚未到達接口。 在第一行之后和ip mroute show
鏈之前添加一個sleep 1
修復它。
如果沒有Fosco的幫助,我將找不到它,而且我之前也不知道如何調試或擴展別名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.