Bash:if命令没有';t在给定的时间变化变量中完成

Bash:if命令没有';t在给定的时间变化变量中完成,bash,Bash,我的程序采用两个变量(n&k,从1到100) 我想找出哪种变量组合能提供最好的输出。这是我的做法: for n in {1..100}; do for k in {1..100}; do PROGRAM n k INPUT | awk -v n="$n" -v k="$k" '{print n,k,$0}' >> OUTPUT # Latter I analyse output and select best combination done

我的程序采用两个变量(n&k,从1到100)

我想找出哪种变量组合能提供最好的输出。这是我的做法:

for n in {1..100}; do
   for k in {1..100}; do
       PROGRAM n k INPUT |
       awk -v n="$n" -v k="$k" '{print n,k,$0}' >> OUTPUT # Latter I analyse output and select best combination
   done
done
这很好用。但是,有些变量(例如,n从80到90)需要很长时间才能运行。
我想要的:
在特定时间内运行给定脚本,如果程序尚未完成,则跳转到以下变量。
例如:

(n=11; k=23) PROGRAM 11 23 INPUT # Runs 59 seconds -- OK
(n=11; k=24) PROGRAM 11 24 INPUT # Runs 34 seconds -- OK
(n=11; k=25) PROGRAM 11 25 INPUT # Already runs 60 seconds -- Too much. End and jump to (n=11; k=26)
(n=11; k=26) PROGRAM 11 26 INPUT 

只需使用运行脚本即可。安装它,例如在Ubuntu
sudo apt get Install coreutils
上。然后使用
超时持续时间程序n k INPUT运行脚本

for n in {1..100}; do
   for k in {1..100}; do
       timeout 60 PROGRAM n k INPUT |
       awk -v n="$n" -v k="$k" '{print n,k,$0}' >> OUTPUT # Latter I analyse output and select best combination
   done
done
如果要执行某项操作,可以检查timeout的返回值

timeout DURATION PROGRAM n k INPUT
if [ $? -ne 0 ]; then
    # it was killed (timeout returns non-zero if it killed the program)
    echo "took too long"
fi
也来看看。它显示了启动进程然后超时的其他方式,而不依赖于超时程序:

(摘自答案):


但是,在您的情况下,您正在运行许多程序。因此,这将导致大量运行的后台进程长时间处于休眠状态,因此这可能并不理想。另一个答案也有同样的问题。

只需使用运行脚本即可。安装它,例如在Ubuntu
sudo apt get Install coreutils
上。然后使用
超时持续时间程序n k INPUT运行脚本

for n in {1..100}; do
   for k in {1..100}; do
       timeout 60 PROGRAM n k INPUT |
       awk -v n="$n" -v k="$k" '{print n,k,$0}' >> OUTPUT # Latter I analyse output and select best combination
   done
done
如果要执行某项操作,可以检查timeout的返回值

timeout DURATION PROGRAM n k INPUT
if [ $? -ne 0 ]; then
    # it was killed (timeout returns non-zero if it killed the program)
    echo "took too long"
fi
也来看看。它显示了启动进程然后超时的其他方式,而不依赖于超时程序:

(摘自答案):


但是,在您的情况下,您正在运行许多程序。因此,这将导致大量运行的后台进程长时间处于休眠状态,因此这可能并不理想。另一个答案也有同样的问题。

直到linux有一个
timeout
命令。非常感谢。这表明,即使几十年后,您仍然没有完成linux的学习。;-)直到linux有一个
timeout
命令。非常感谢。这表明,即使几十年后,您仍然没有完成linux的学习。;-)