Bash评估:[vs ||

时间:2014-04-04 19:37:24

标签: linux bash shell unix scripting

我有一个存储在文件中的pid:

echo 394 > pid_stored

我正在检查pid是否正在运行:

kill -0 $(cat pid_stored) 2> /dev/null || echo "PID not running"

就像魅力一样,但如果我想在真或假的情况下做多个动作,我想我需要一个if if fi结构。但由于某种原因,我无法弄清楚[或[[不以同样的方式评估:

if [[ $(kill -0 $(cat pid_stored) 2> /dev/null) ]]
then echo "PID IS NOT RUNNING"
fi

不起作用,它总是评估为真。错误流以2> 2指示。 to / dev / null因为如果pid存在或失败,kill -0的计算结果为true

谢谢!

1 个答案:

答案 0 :(得分:4)

删除[[ and ]],因为它用于评估表达式:

if kill -0 $(<pid_stored) 2> /dev/null
then
   echo "PID IS RUNNING"
else
   echo "PID IS NOT RUNNING"
fi

PS:您可以使用cat

来避免$(<pid_stored)

否定你可以使用:

if ! kill -0 $(<pid_stored) 2> /dev/null