shell - ps -ef | grep * 命令无法正常工作
问题描述
我有如下简单的 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 以及如何解决它。
解决方案
如果脚本在计算行数之前将输出发送到文件,然后在之后显示输出,您可以看到发生了什么:
#!/bin/bash
service=$1
echo Directly in Script:
ps -ef | grep $service | grep -v grep | tee test.txt | wc -l
cat test.txt
echo Inside Subshell:
RESULT=$(ps -ef | grep $service | grep -v grep | tee test.txt | wc -l)
echo $RESULT
cat test.txt
捕获命令的输出后,bash 会启动另一个 shell 来运行该命令 - 但该子 shell 也会显示在进程列表中。
当我运行该脚本时,我得到:
$ ./test.sh lca
Directly in Script:
2
gcti 4268 1 0 2018 ? 21:59:03 ./lca 4999
t816826 9159 7009 0 09:22 pts/1 00:00:00 /bin/bash ./test.sh lca
Inside Subshell:
3
gcti 4268 1 0 2018 ? 21:59:03 ./lca 4999
t816826 9159 7009 0 09:22 pts/1 00:00:00 /bin/bash ./test.sh lca
t816826 9166 9159 0 09:22 pts/1 00:00:00 /bin/bash ./test.sh lca
推荐阅读
- reactjs - React Native 中的常见按钮组件与 axios api 调用一起创建问题
- java - 无法将输出打印为(姓名+成绩)
- azure - 如何在 ConfigMap 中设置 ConnectionString 并从 ASP.NET Core 应用程序中读取它?
- c# - 添加购物车的在线购物应用程序
- python - 使用赋值运算符时,函数内部无法访问全局范围内的变量
- react-native - 使用本机反应从wifi打印收据
- google-bigquery - 如何在 bigquery 中制作像 ga_sessions_YYYYMMDD(GA360 export table) 这样的表
- c - bpf_map_update_elem 等 bps API 地图助手的详细流程是什么?
- angular - 使用角度形式执行计算
- javascript - WebSocket 连接超时