我有 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})
给出:
TEST: command not found
cmd="echo TEST"
eval ${cmd}
给出:
TEST
关于linux - 如何将 '<' 和 '>' 传递给 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270219/