如何在bash中组合超时和eval命令

问题描述 投票:5回答:4

对于执行存储在变量中的命令,使用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" ...
bash timeout eval
4个回答
1
投票

这将起作用

if timeout "$PROGRAM" "$OPT1" "$OPT2" ... ; then
    echo Program ran successfully
else
    echo Program terminated due to timeout
fi

1
投票

简单:

a="echo -e 'a\nb' | wc -l"
eval timeout 10 $a

输出:

2

0
投票

如果是关于将命令保留在变量中,则可以使用,尽管不知道这是否是一种“正确的bash方式”:

command.sh:

#!/bin/bash
echo -e 'a\nb' | wc -l

run.sh:

#!/bin/bash
a="command.sh"
timeout 10 ./$a

0
投票

echo "$(timeout 10 echo -e 'a\nb' | wc -l)"要么echo "$(timeout 2 echo "$(eval $a)")"

这里的说明1:HERE

解释2在这里:HERE

© www.soinside.com 2019 - 2024. All rights reserved.