当我给
ps -aux|grep -w 'bash'|grep -v 'grep'|awk '{print $2}'
我得到输出:
32356
我也给
echo $(ps -aux|grep -w 'bash'|grep -v 'grep'|awk '{print $2}')
我得到输出:
32356 32551
为什么输出有差异?
答案 0 :(得分:2)
您似乎正在使用当前正在运行的Shell的pid
。最好用
echo $$ # which is a bash special variable
答案 1 :(得分:2)
正在发生的事情是$(...)
语法启动了一个子外壳。因此,这些括号内的ps
命令将找到您当前的shell(您可以使用$$
来获得它,如@tink回答的那样)和由括号调用的子shell。>
使用ps fux
并将其编入文件,您可以确切地看到正在发生的事情:
ps fux | grep -w bash > a
cat a
me 11603 0.1 0.0 114408 3728 pts/1 Ss 13:37 0:00 \_ -bash
me 11955 0.0 0.0 103348 872 pts/1 S+ 13:41 0:00 \_ grep -w bash
echo $(ps fux | grep -w bash > b)
cat b
me 11603 0.1 0.0 114408 3728 pts/1 Ss+ 13:37 0:00 \_ -bash
me 11981 0.0 0.0 114408 2304 pts/1 S+ 13:41 0:00 \_ -bash
me 11983 0.0 0.0 103348 872 pts/1 S+ 13:41 0:00 \_ grep -w bash
尽管@tink为您提供了一个很好的解决方案,但我希望这个答案能帮助您了解正在发生的事情。