この詳細な回答で言及されているように、POSIXシステムcd
にはシェルビルトインに加えて外部バイナリがあります。OS X 10.8上では、です/usr/bin/cd
。cd
独自の作業ディレクトリを変更するとすぐに終了するため、組み込みのようには使用できません。どんな目的に役立ちますか?
/bin/cd
ただし、私のFedora 19には含まれています。
/bin/cd
もありません/usr/bin/cd
。
この詳細な回答で言及されているように、POSIXシステムcd
にはシェルビルトインに加えて外部バイナリがあります。OS X 10.8上では、です/usr/bin/cd
。cd
独自の作業ディレクトリを変更するとすぐに終了するため、組み込みのようには使用できません。どんな目的に役立ちますか?
/bin/cd
ただし、私のFedora 19には含まれています。
/bin/cd
もありません/usr/bin/cd
。
回答:
これは主に、シェルの内側と外側の両方でPOSIXツールチェストを使用できるようにするために使用します(これらを必要とする場合のPOSIXの根拠を参照)。
のためにcd
、それは非常に有用ではありませんcd
が、ディレクトリを変更しますが、他の副作用があることに注意してください:chdir()
そのディレクトリにアクセスできるかどうかを判断するのに役立つ終了ステータスを返し、できない理由を説明する有用なエラーメッセージを出力しますchdir()
できないとき。
例:
dirs_i_am_able_to_cd_into=$(find . -type d -exec cd {} \; -print)
別の潜在的な副作用は、ディレクトリの自動マウントです。
いくつかのシステムでは、標準のシェル組み込みコマンドのほとんどの外部コマンドは、同じスクリプトへのシンボリックリンクとして実装されます。
#! /bin/sh -
"${0##*/}" "$@"
それはシェルを起動し、その中に組み込まれているものを実行することです。
他のシステム(GNUなど)には、真の実行可能コマンドとしてユーティリティがあり、動作がシェルの組み込みバージョンと異なる場合に混乱を招く可能性があります。
cd
コマンドを使用できます。自動マウント可能なリモートファイルシステムの可用性を監視する場合や、タイムクリティカルな処理を行う前に役立つ場合があります。
非組み込みcdコマンドが利用可能であるという事実は、基本的にPOSIXのが原因である要件のexec家族のコマンドから呼び出すことがすべての正規組み込みコマンドについてenv
、find
、nice
、nohup
、time
およびxargs
これらのコマンドの一部自体が組み込みコマンドとして実装されていない事実に組み合わせます。
cd
これらのコマンドと組み合わせることはまったく無意味なので、それはあまり意味がありません。ただし、ここに多少なりともテナント可能な例があります。
find . -type d -exec cd {} \;
env HOME=/foo cd
break, :, continue, . , eval, exec, exit, export, readonly, return, set, shift, times, trap, unset
外部コマンドとしては無関係cd
ですが、コマンドとしていくつかの文書化されたユースケースを持つ通常のビルトインです。
パスがアクセス可能なディレクトリに対応するかどうかをチェックすることに加えて、cd
実行可能プロセスと使用するCDPATH
変数、およびプリントアウトであろう、それが首尾よく使用された場合に解決ディレクトリの絶対パス。
$ export CDPATH=/usr
$ echo bin lib | xargs -n 1 cd
/usr/bin
/usr/lib
これは非常にまれにしか役に立ちませんが、一致するディレクトリを検索するために同じロジックを再実装する必要がありません。具体的なユースケースは、いくつかの可能な親の下で特定の名前の最初の既存のディレクトリを見つけることです。
cd
はのプロセスも行いますOLDPWD
がcd -
、環境変数はすでに利用可能であるため、これは具体的にはあまり有用ではありません。
/usr/bin/cd
シェルが組み込まれていないことに注意してください。