这命令echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`在终端输出是一个数值, 在脚本中会输出两个值,为什么?

2013-11-28 23:29:55 +08:00
 vicence
脚本如下:

#!/bin/bash
# using recursion



# cpu使用率

echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`
7541 次点击
所在节点    Linux
5 条回复
qmake
2013-11-28 23:41:19 +08:00
有一个是当前脚本的进程?
BOYPT
2013-11-28 23:54:50 +08:00
其实写成这样就能看出区别:

echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`
ps aux|grep $0|grep -v grep|mawk '{print $3}'



第一行还是输出两个的。

因为是在子shell里面运行,里面的$0和外面的不一样。
vicence
2013-11-29 00:08:01 +08:00
@BOYPT 但如果想取ps aux|grep $0|grep -v grep|mawk '{print $3}'的值,
num=`ps aux|grep $0|grep -v grep|mawk '{print $3}'`
echo $num
这样值还是两个
BOYPT
2013-11-29 00:19:12 +08:00
@vicence 只要放在``里面就就是子shell了啊,只要是子shell那一定就不对了。
Jesse
2013-11-29 01:10:45 +08:00
@vicence

# 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}'`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/91062

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX