重定向输出时cd不起作用?

时间:2009-01-12 18:25:50

标签: linux bash macos cd built-in

这是一个益智游戏:有人能解释为什么cd在输出被重定向到管道时失败了吗?

E.g:

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命令和日志条目并处理输出的函数。

1 个答案:

答案 0 :(得分:14)

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