对于执行命令存储在变量的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'是有用的。 –