「出口」はどこで定義されていますか?

「出口」はどこで定義されていますか?

追加のタスクを実行するためにbashコマンドを使用したいとします。簡単な例として、実行する前に「123」をエコーするようにしたいとします。

簡単な方法は、コマンドにエイリアスを追加することです。それでも元のファイルが必要なので、それを使用して見つけることができる正確なパスでそれを参照できますwhich。たとえば、

$ which rm
/bin/rm
$ echo "alias rm='echo 123 && /bin/rm'" >> .bashrc

rmを利用して照会できて簡単でしたwhich

しかし、私はこれを行うためにそれを使用しようとしていますが、それを理解できないようですexitwhich

$ which exit
$ echo $?
1

このコマンドには出力パスはありません。実際にwhichコマンドがない場合は、ゼロ以外の終了コードを返します$PATH

私はこれが関数かもしれないと思いましたが、明らかにそうではありません。

$ typeset -F | grep exit
$ echo $?
1

したがって、exitコマンドはどこにも関数やコマンドで定義されていませんが$PATH、入力するとexit端末が閉じます。どうやらどこかに定義されていますが、どこにいるのかわかりません。

これはどこで定義されており、どのように明示的に呼び出すことができますか?

答え1

exit殻です特殊内蔵注文する。それ立てられるシェルインタプリタを使用すると、シェルはこれについて知っており、検索することなく直接実行できます。

ほとんどのシェルでは、次のものを使用できます。

$ type exit
exit is a shell builtin

組み込み機能の実装方法を理解するには、シェルのソースコードを読む必要があります。ここにソースコードへのリンクがあります。bash内蔵終了

bash、、、、、、使用するzsh組み込みコマンドを明示的に呼び出すには、組み込みコマンドを使用します。ksh93mkshpdkshexitbuiltin

builtin exit

バラより組み込みシェルを明示的に呼び出すには?詳細については。

答え2

exitはシェルのコマンドなので、すべてのシェル - たとえば、bashまたはkshこのコマンドがあります

答え3

このコマンドはexitbash 内にあります。この情報を使用して助けを求めることができます。

$ help exit

これは、単にexitシェルが知られていることを示しています。しかし、それは何ですか? :

$ type -a exit
exit is a shell builtin

外部ファイルやプログラムで検索されず、シェルの外部には存在しません。

これを行いなさい:LESS=+/'^ *exit \[n\]' man bashこれを捜しなさい:

終了[n]は、シェルがn状態で終了するようにします。 nが省略された場合、終了ステータスは最後に実行されたコマンドのステータスです。 EXIT のトラップは、シェルが終了する前に実行されます。

道路POSIX 組み込み関数として定義

コードから明示的に呼び出すには、次のコマンドを使用します。

builtin exit

関連情報