Bashコマンドで何か特別なことをしたいとします。簡単な例として、実行する前に「123」をエコーさせたいと想像してください。
これを行う簡単な方法の1つは、コマンドのエイリアスを作成することです。まだオリジナルが必要なので、which
を使用して見つけることができる正確なパスで参照できます。例えば:
$ which rm
/bin/rm
$ echo "alias rm='echo 123 && /bin/rm'" >> .bashrc
rm
を使用してwhich
へのパスを検索できたため、これは簡単でした。
しかし、私はexit
でこれを行おうとしていますが、which
はそれについて何も知らないようです。
$ which exit
$ echo $?
1
コマンドはパスを出力せず、実際にはゼロ以外の終了コードを返しました。これは、コマンドが$PATH
にない場合にwhich
が行います。
多分それは関数だと思いましたが、どうやらそうではないようです:
$ typeset -F | grep exit
$ echo $?
1
したがって、exit
コマンドは$PATH
の関数またはコマンドとしてどこにも定義されていませんが、exit
と入力すると、ターミナルが閉じます。ですから、どこかで明確に定義されていますが、どこにあるのかわかりません。
それはどこで定義されており、どのように明示的に呼び出すことができますか?
exit
はシェルです 特別な組み込み コマンド。それはシェルインタープリターで構築されました、シェルはそれを知っており、どこも検索せずに直接実行できます。
ほとんどのシェルでは、次のものを使用できます。
$ type exit
exit is a Shell builtin
シェルのソースを読んで、そのビルトインがどのように実装されているかを確認する必要があります。ここに、 bash
exit builtin のソースへのリンクがあります。
bash
、zsh
、ksh93
、mksh
、pdksh
、exit
ビルトインを明示的に呼び出すには、builtin
ビルトインコマンドを使用します。
builtin exit
詳細については、 組み込みのシェルを明示的に呼び出す方法 を参照してください。
コマンドexit
はbashの内部に属しています。これを使用して、いくつかのヘルプを見つけることができます。
$ help exit
これは、exit
がシェルに認識されていることを示していますが、それは何ですか?:
$ type -a exit
exit is a Shell builtin
外部ファイルまたはプログラムとしては検出されず、シェルの外部には存在しません。
これを実行します:LESS=+/'^ *exit \[n\]' man bash
これを見つける:
exit [n]シェルをステータスnで終了させます。 nを省略した場合、終了ステータスは最後に実行されたコマンドのステータスになります。 EXITのトラップは、シェルが終了する前に実行されます。
また、 POSIXビルトインとして定義 です。
コードで明示的に呼び出すには、次を使用します。
builtin exit
exit
はシェルのコマンドであるため、bash
やksh
などの任意のシェルにこのコマンドがあります