当我给
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
为什么输出有差异?
正在发生的事情是$(...)
语法启动一个子外壳。因此,这些括号内的 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给了你一个很好的解决方案,但我希望这个答案有助于理解正在发生的事情。
看起来您正在追逐当前正在运行的 shell 的pid
。 这是最好的实现
echo $$ # which is a bash special variable