技术解析

这命令echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`在终端输出是一个数值, 在脚本中会输出两个值,为什么?
0
2021-07-20 03:47:36
idczone
脚本如下:

#!/bin/bash
# using recursion



# cpu使用率

echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`
有一个是当前脚本的进程?

其实写成这样就能看出区别:
echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`
ps aux|grep $0|grep -v grep|mawk '{print $3}'

第一行还是输出两个的。
因为是在子shell里面运行,里面的$0和外面的不一样。

但如果想取ps aux|grep $0|grep -v grep|mawk '{print $3}'的值,
num=`ps aux|grep $0|grep -v grep|mawk '{print $3}'`
echo $num
这样值还是两个

只要放在``里面就就是子shell了啊,只要是子shell那一定就不对了。


A: fine
echo `ps aux|grep $$|grep -v grep|awk '{print $3}'`
B : fine
ps aux|awk '($2 == PROCINFO["ppid"]){print $3}'
C : better
export shpid=$$
echo `ps aux|awk '($2 == ENVIRON["shpid"]){print $3}'`

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服