コマンドのパス名出力を「cd」にリダイレクトできないのはなぜですか?

コマンドのパス名出力を「cd」にリダイレクトできないのはなぜですか?

cd他のコマンドからリダイレクトするディレクトリ名を受け入れようとしています。次のいずれの方法も機能しません。

$ echo $HOME | cd
$ echo $HOME | xargs cd

これは働きます:

$ cd $(echo $HOME)

最初のコマンドセットが機能しないのはなぜですか?このように失敗する他のコマンドもありますか?

ベストアンサー1

cd外部コマンドではなく、シェル組み込み機能です。外部コマンドなど、ブランチ/実行コンテキストでは、別のプロセスではなく、現在のシェルのコンテキストで実行されます。

3番目の例は、組み込み関数を呼び出す前にシェルが変数とコマンド置換を拡張して値を引数として受け取るためにcd機能します。cd${HOME}

POSIXシステムするバイナリがありますcd。私のFreeBSDコンピュータにバイナリがありますが、/usr/bin/cdあなたが思うように動作しません。バイナリを呼び出すと、cdシェルはバイナリを分岐/実行し、実際には作業ディレクトリが渡した名前に変更されます。ただし、これが完了するとバイナリが終了し、分岐/実行されたプロセスが消えてシェルに戻ります。シェルは起動前のディレクトリに残ります。

おすすめ記事