「cd」外部コマンドの意味は何ですか?

「cd」外部コマンドの意味は何ですか?

引用したようにこれは素晴らしい答えですcd、POSIXシステムには組み込みシェルに加えて外部バイナリがあります。 OS X 10.8では、独自の作業ディレクトリを変更した直後に終了するため、組み込み/usr/bin/cdプログラムのように使用することはできません。cdその目的は何ですか?

答え1

これは、主にPOSIXツールボックスをシェルの内側と外側の両方で使用できるようにするために使用されます。POSIXでこれを求める理由)。

これはcdあまり役に立ちませんが、cdディレクトリを変更すると他の副作用があることに注意してください。ディレクトリにchdir()アクセスできるかどうかを判断するのに役立つ終了ステータスを返し、ディレクトリにアクセスできない理由を説明する便利なエラーメッセージを出力しますchdir()。できない時。

例:

dirs_i_am_able_to_cd_into=$(find . -type d -exec cd {} \; -print)

別の潜在的な副作用はディレクトリの自動マウントです。

一部のシステムでは、標準シェル組み込みのほとんどの外部コマンドが同じスクリプトへのシンボリックリンクとして実装されています。

#! /bin/sh -
"${0##*/}" "$@"

これはシェルを起動し、その中に組み込まれたコマンドを実行することです。

他のシステム(GNUなど)はユーティリティを実際の実行可能なコマンドとして扱うため、動作がシェルの組み込みバージョンと異なる場合に混乱を招く可能性があります。

答え2

組み込まれていないcdコマンドを使用できるという事実は、本質的にPOSIXによるものです。必要すべての一般的な組み込みコマンドは、envexecの一連のコマンドである、、、およびを介して組み合わせることができます。findnicenohuptimexargs

しかし、これらのコマンドと組み合わせることは意味がないので、これはcd意味がありません。しかし、多少防御可能な例は次のとおりです。

find . -type d -exec cd {} \;
env HOME=/foo cd

答え3

パスがアクセス可能なディレクトリに対応していることを確認することに加えて、cd実行可能ファイルはCDPATH変数を処理して使用します。印刷する正常に使用された場合に確認されたディレクトリの絶対パス。

$ export CDPATH=/usr
$ echo bin lib | xargs -n 1 cd
/usr/bin
/usr/lib

これは時々便利ですが、一致するディレクトリを検索するために使用されるのと同じロジックを再実装する必要はありません。特定のユースケースは、可能な複数の親ディレクトリの下で特定の名前の最初の既存のディレクトリを見つけることです。

cdまた、処理されますが、OLDPWD環境cd -変数はすでに使用可能であるため、これはあまり具体的には便利です。

関連情報