4

这是一个谜:谁能解释为什么cd当输出被重定向到管道时失败?

例如:

james@machine:~$ cd /tmp                          # fine, no problem
james@machine:~$ cd /tmp | grep 'foo'             # doesn't work
james@machine:~$ cd /tmp | tee -a output.log      # doesn't work
james@machine:~$ cd /tmp >out.log                 # does work

在 OSX、Ubuntu 和 RHEL 上验证。

有任何想法吗?

编辑:我正在输出的管道似乎很奇怪cd?原因是它来自一个函数,该函数用日志条目包装任意 shell 命令并处理输出。

4

1 回答 1

14

当您重定向输出时,它会生成一个子 shell 进程,更改子进程中的目录,然后退出。当您不重定向输出时,它不会产生任何新进程,因为它是一个内置的 shell 命令。

于 2009-01-12T18:29:35.870 回答