0
if [ $(ps -ef | grep date) ] && [ $(ps -ef | grep time) ]
then
     echo "success"
else
    exit 1
fi

给出 [: too many arguments 错误

出了什么问题?


来自评论:

有两个进程正在运行,如果执行我的自动化工具,我想检查这两个进程是否正在运行。为此我需要检查这两个进程是否正在运行,当你说grep包含在参数中时你是对的,它总是成功我只想检查两个进程是否正在运行而忽略了grep部分。我可以做一些事情,比如检查$? == 0,但我将如何为这两个进程做这件事?

4

2 回答 2

1

Better do this, it will be lighter than multiple subshells $( ) and pipes | (many fork()s in the background) :

if pidof &>/dev/null date && pidof &>/dev/null time; then
     echo "success"
else
    exit 1
fi

No need the test commands :

[           # POSIX test 

or

[[          # bash enhanced test

or

test        # word test 

we use boolean logic here.

于 2013-04-03T19:39:42.623 回答
1

[命令需要相当有限的值列表。您的命令的输出可能会生成大量数据,这些数据看起来ps -ef不像预期的那样。[ value1 = value2 ][

你可以试试:

if [ "$(ps -ef | grep date)" ] && [ "$(ps -ef | grep time)" ]
then echo "success"
else exit 1
fi

如果至少有一个命令引用date和至少一个命令引用,这将报告成功time(并且由于grep命令包含该参数,它应该始终成功),但这可能不是您所追求的。使用双引号强制执行的单个参数,该[命令检查参数是否为空字符串(如果不是则成功)。

你真正想做什么?

于 2013-04-03T19:24:58.747 回答