【发布时间】:2021-01-20 04:15:53
【问题描述】:
我有如下简单的 unix shell 脚本。这对服务的计数不同
#!/bin/bash
service=$1
ps -ef | grep $service | grep -v "grep" | wc -l
PROCESS_NUM=$(ps -ef | grep $service | grep -v "grep"| wc -l)
echo $PROCESS_NUM
在上面的代码中,下面一行给出了 2 的输出。
ps -ef | grep $service | grep -v "grep" | wc -l
但是当同一行被分配给变量时,其输出为 3。
PROCESS_NUM=$(ps -ef | grep $service | grep -v "grep"| wc -l)
echo $PROCESS_NUM
为什么这会增加 1 以及如何解决它。
【问题讨论】:
-
当您执行
X=$(...)时,您正在启动一个子shell 来执行命令,所以现在您拥有实际运行的东西以及带有命令行参数的shell 脚本和也提到该过程的子shell。您需要的是ps -ef | grep $service | grep -v "grep" | grep -v "$0" | wc -l,它将摆脱 shell 脚本及其子shell。 -
它的工作。谢谢杰瑞 :)