出力をリダイレクトするときにcdが機能しませんか?
質問
謎解き:出力がパイプにリダイレクトされたときに 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
の出力をパイピングしているのは奇妙に思えますか?その理由は、任意のシェルコマンドをログエントリでラップし、出力を処理する関数によるものだからです。
解決
出力をリダイレクトすると、子シェルプロセスが生成され、子プロセスのディレクトリが変更されて終了します。出力をリダイレクトしない場合、組み込みのシェルコマンドであるため、新しいプロセスは生成されません。
所属していません StackOverflow