Shell 与&&;壳牌公司的接线员?

Shell 与&&;壳牌公司的接线员?,shell,Shell,正在给出[:参数太多错误 出什么事了 在评论中: 有两个进程正在运行,如果执行我的自动工具,我想检查这两个进程是否正在运行。为此,我需要检查这两个进程是否正在运行,你说的是对的,grep包含在参数中,它总是成功的。我只想检查两个进程是否正在运行,忽略grep 部分。我可以做一些事情,比如检查$?==0,但如何对这两个进程都这样做 [命令所需的值列表非常有限。您的ps-ef命令的输出可能会生成大量数据,这些数据看起来不像[value1=value2]等[/code>所需的数据 你可以试试: if

正在给出[:参数太多错误

出什么事了


在评论中:


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


[
命令所需的值列表非常有限。您的
ps-ef
命令的输出可能会生成大量数据,这些数据看起来不像
[value1=value2]
[/code>所需的数据

你可以试试:

if [ $(ps -ef | grep date) ] && [ $(ps -ef | grep time) ]
then
     echo "success"
else
    exit 1
fi
如果至少有一个命令引用了
date
,并且至少有一个命令引用了
time
(并且由于
grep
命令包含该参数,它应该总是成功的),那么这将报告成功,但这可能不是您想要的结果。如果使用单参数(由双引号强制执行),则
[
命令检查参数是否为空字符串(如果不是,则成功)


你到底想做什么?

最好这样做,它将比多个子shell
$()
和管道
|
更轻(许多
fork()
在后台):

不需要测试命令:

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


我们在这里使用布尔逻辑。

pidof
可能更适合使用。您想实现什么?有两个进程正在运行,如果执行我的自动工具,我想检查这两个进程是否正在运行。为此,我需要检查这两个进程是否正在运行,如果您说grep包含在它的参数中,您是对的总是成功我只想检查两个进程是否正在运行,而不包括grep部分。我可以做一些事情,比如检查$?==0,但我如何对这两个进程都这样做呢?如果您的命令名真的是
date
time
,那么您将处于隐藏状态,因为它们是标准的Unix实用程序,您将得到错误的posi如果你的命令名真的是
xyz_date
xyz_time
或其他类似的特殊名称,你就有更好的机会了。有些程序,比如
pidof
pgrep
,会搜索进程。也许你应该使用其中的一个。
if pidof &>/dev/null date && pidof &>/dev/null time; then
     echo "success"
else
    exit 1
fi
[           # POSIX test 
[[          # bash enhanced test
test        # word test