「組み込み」bash コマンドはどのように定義されますか?

「組み込み」bash コマンドはどのように定義されますか?

cd ..のようなコマンドは実際には に変換されてから実行されることに気付きましたbuiltin cd ..。しかし、 はどのようにbuiltin定義されていますか?which builtinには何も表示されず/bin/usr/binなどにもありません。これは単に bash プログラムの一部であり、別の方法で処理されているのでしょうか?

答え1

組み込みコマンドは bash の一部です。 コマンドが組み込みコマンドであるかどうかを確認するには、 を使用しますtype。 例:

$ type export cd source alias
export is a shell builtin
cd is a shell builtin
source is a shell builtin
alias is a shell builtin

多くの組み込みコマンドは、他の方法では動作できないために組み込まれています。 cdおよびsourceは例です。

その他の組み込み関数は、効率化のためだけに組み込まれています。 test(別名[...]) および はecho例です。

詳細については、SHELL BUILTIN COMMANDSのセクションman bashまたはオンラインをご覧ください。bash マニュアル使用可能な組み込みコマンドの一覧を取得するには、helpコマンド プロンプトで を実行します。 などの特定の組み込みコマンドに関する情報を取得するにはtest、 を実行します。 はbash の組み込みコマンドに関する情報を提供しますが、 は外部コマンドに関するヘルプを提供する可能性が高いことにhelp test注意してください。help testtestman testtest

実行可能および組み込みの両方で使用できるコマンド

オプションを使用すると-atype指定されたコマンドが含まれるすべての場所が表示されます。例:

$ type -a echo
echo is a shell builtin
echo is /bin/echo

組み込みが利用可能な場合に実行可能ファイルを使用する方法

何らかの理由で、シェルの組み込みではなく特定の実行可能ファイルを使用する場合は、パスを指定するだけです。

$ /bin/echo "This is not the builtin"
This is not the builtin

通常、組み込み機能にはより多くの機能があるため、これは通常、互換性テストにのみ役立ちます。

関数またはエイリアスによって隠されているときにシェル組み込みを実行する方法

選択肢が与えられた場合、シェルは通常、組み込みコマンドの実行を選択します。例外は、ユーザーが同じ名前のエイリアスまたは関数を定義している場合です。組み込みコマンドを確実に実行したい場合は、次のbuiltinコマンドを使用します。

$ builtin echo  1 2 3
1 2 3

関連情報