问题描述
使用 bash,我想了解以下不同的输出:
ps |wc -l
4
和
n=$(ps|wc -l)
echo $n
5
我猜 $(ps|wc -l)
指令正在创建一个额外的子进程,但我真的不明白为什么将它添加到 ps 计数中
解决方法
你说过:$( )
创建一个子进程。因为没有选项的命令 ps
精确地列出了当前 shell 的所有子进程,所以你会多出一行。我通过用 wc
替换 tee
来检查这一点:
$ ps | tee four
PID TTY TIME CMD
XXXXXXX pts/5 00:00:00 bash
YYYYYYY pts/5 00:00:00 ps
ZZZZZZZ pts/5 00:00:00 tee
$ : $(ps -H | tee five)
$ cat five
PID TTY TIME CMD
XXXXXXX pts/5 00:00:00 bash
YYYYYYY pts/5 00:00:00 bash
ZZZZZZZ pts/5 00:00:00 ps
ΩΩΩΩΩΩΩ pts/5 00:00:00 tee
我还将 -H
传递给 ps
,以便它证明流程树。