【发布时间】:2018-07-30 18:58:39
【问题描述】:
我正在尝试使用以下命令计算流程实例:
$ ps -ef | grep "test.sh" | egrep -v "grep|vi|more|pg" | wc -l
1
这在命令行上完美运行,但在我将输出分配给变量时的脚本中:
script_instances=`ps -ef | grep "test.sh" | egrep -v "grep|vi|more|pg" | wc -l`
echo $script_instances
输出:
2
它以 1 递增,我不明白为什么会这样。
如果我只是在脚本中输入以下命令,它会正确打印
ps -ef | grep "test.sh" | egrep -v "grep"
输出:
root 14243 12162 0 19:12 pts/1 00:00:00 sh test.sh
我使用的是 Ubuntu 14.04.5 LTS
【问题讨论】:
-
如果去掉
wc -l,再看script_instances的内容,你看到了什么? -
@BenjaminW。更新了我的问题
-
理想情况下,根本不要使用
ps | grep。pgrep命令会执行上述操作,但也会天生避免匹配自身。 -
(如果您的目标是确保只有一个脚本实例,那么最可靠的方法是使用锁定文件;这样如果有人打开一个在您不知道的编辑器中创建文件并将其列入黑名单,或者是否有另一个同名脚本等)。