CD не работает при перенаправлении вывода? - PullRequest
4 голосов
/ 12 января 2009

Вот загадка: кто-нибудь может объяснить, почему 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? Причина в том, что это функция, заключающая в себе произвольные команды оболочки с записями журнала и имеющая дело с выводом.

1 Ответ

14 голосов
/ 12 января 2009

Когда вы перенаправляете вывод, он порождает дочерний процесс оболочки, изменяет каталог в дочернем процессе и завершает работу. Когда вы не перенаправляете вывод, он не порождает новый процесс, потому что это встроенная команда оболочки.

...