这是我在Arch的dash shell和FreeBSD默认的sh shell中测试的,结果是一样的。
$ sleep 100 &
$ jobs
[1] + Running sleep 100
$ jobs | wc
0 0 0
$ jobs | grep 1
我不能wc
或grep
在命令的输出上jobs
。该jobs
命令是 shell 内置的。
这是什么原因呢?是否以jobs
某种方式在交互式 shell 和管道中打印不同的信息?我不知道细节,但我知道 的类似行为ls
。即,您将在 shell 中看到紧凑的输出ls
,但grep
会在独立行中处理每个文件名。
编辑:我发现了一个类似的问题:如何杀死破折号中的所有后台作业?,这个问题也是由于无法获取jobs
命令的输出造成的。