if [ $(ps -ef | grep date) ] && [ $(ps -ef | grep time) ]
then
echo "success"
else
exit 1
fi
给[:太多参数错误
出了什么问题?
来自评论:
有两个进程正在运行,我想检查这两个进程是否正在运行,如果执行我的自动化工具。为此,我需要检查这两个进程是否正在运行,当你说
grep
包含在参数中它总是成功时,你是对的我只想检查两个进程是否正在运行而忽略grep
部分。我可以做一些事情,例如检查$? == 0
,但我如何为这两个进程执行此操作?
答案 0 :(得分:1)
[
命令需要相当有限的值列表。 ps -ef
命令的输出可能会生成大量数据,这些数据看起来不像[ value1 = value2 ]
等[
所期望的数据。
你可以尝试:
if [ "$(ps -ef | grep date)" ] && [ "$(ps -ef | grep time)" ]
then echo "success"
else exit 1
fi
如果至少有一个引用date
的命令和至少一个引用time
的命令(并且由于grep
命令包含该参数,它将始终成功),这将报告成功,但这可能不是你想要的。使用单引号,由双引号强制执行,[
命令检查参数是否为空字符串(如果不是则成功)。
你真的想做什么?
答案 1 :(得分:1)
最好这样做,它会比多个子shell $( )
和管道|
(背景中有很多fork()
)轻:
if pidof &>/dev/null date && pidof &>/dev/null time; then
echo "success"
else
exit 1
fi
不需要测试命令:
[ # POSIX test
或
[[ # bash enhanced test
或
test # word test
我们在这里使用布尔逻辑。