簡體   English   中英

Bash命令可在cmd行上運行,但不能在腳本中運行

[英]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是否在腳本的$ PATH中?
  • 您是否在腳本中使用了不同的語言環境($ LANG或$ LC _ ???),因此命令的輸出被翻譯成另一種語言?

我將它分成較小的部分進行調試。

即,首先具有執行此操作的腳本:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM