我有bash脚本可以在另一个线程中运行进程,如果在超时后挂断,则将其杀死。所有这些都工作得很好,但当进程需要“”输出到另一个文件时,它不计算它们。
代码:

#!/bin/bash
($1)&
PID=$!
echo "Program '"$1"' started, PID="$PID
i=1
while [ $i -le 600 ]
    do
    ps -p $PID >> /dev/null
    if [ $? -ne 0 ]
      then
      wait $PID
      exit $? #success, return rc of program
    fi
    i=$(($i+1))
    echo "waiting 1 second..."
    sleep 1
done

#program does not want to exit itself, kill it
echo "killing program..."
kill $PID
exit 1 #failed

我是这样用的:
safestart.sh './bzip2 -d  sample2.bz2 -k'

一切如期而至,但如果我用这样的东西:
safestart.sh './cc_dry2 < dhryinput > results'

它没有“”符号。我已经试过了。同样的结果,我完全迷失在这里。

最佳答案

解决方案
问题在于:

($1)&

您应该使用:
eval $1 &

请参阅下面的示例以更好地理解该问题。
例子
cmd="echo TEST"
$(${cmd})

给予:
测试:未找到命令
cmd="echo TEST"
eval ${cmd}

给予:
测试

关于linux - 如何将'<'和'>'传递给bash脚本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15270219/

10-10 17:39