對於執行命令存儲在變量的eval
命令用於:如何在bash超時和eval命令組合
└──> a="echo -e 'a\nb' | wc -l"
└──> eval $a
2
但如何才能將其與timeout
命令相結合?我試過下面這給了我錯誤的輸出:
└──> timeout 10 $a
'a
b' | wc -l
而這給了我錯誤的情況如下:
└──> timeout 10 "$a"
timeout: failed to run command `echo -e \'a\\nb\' | wc -l': No such file or directory
└──> timeout 10 $(eval $a)
timeout: failed to run command `2': No such file or directory
└──> timeout 10 $(eval "$a")
timeout: failed to run command `2': No such file or directory
問題也可以站在:我怎麼可以肯定的是下面的命令得到正確執行?
timeout 10 "$PROGRAM" "$OPT1" "$OPT2" ...
不要存儲在變量的命令。改爲使用[功能](http://tldp.org/LDP/abs/html/functions.html)。您可以重新聲明函數,就像您可以重新分配變量一樣。 – anishsane
&要回答你的問題,你可以運行'eval'timeout 10 $ a「'。但是請記住['eval'是邪惡的](http://mywiki.wooledge.org/BashFAQ/048)&eval'的使用是[永遠不鼓勵](http://stackoverflow.com/questions/17529220/)爲什麼 - 應該 - 評估 - 避免 - 在 - 什麼 - 應該我使用 - 相反),除非絕對沒有其他方式。 – anishsane
當我的'PROGRAM =「echo」''OPT1 =「Hello」'時,我甚至需要'eval'嗎?當有管道(如原始問題中提到的)或其他一些尷尬的字符時,我認爲'eval'是有用的。 –