Unix 端末で exit コマンドはどのように機能しますか?

Unix 端末で exit コマンドはどのように機能しますか?

exitUnix ターミナルでコマンドがどのように機能するかを説明していただけますか?

の検索はman exit役に立たwhich exitず、次の問題に遭遇しました。

新しい Red Hat システムに Anaconda と PyCharm のアドオン パッケージをインストールした後、exitターミナル セッションを終了するために を呼び出すたびに、一連のエラーが発生し、その後ターミナルが予想どおり終了することに気付きました。エラーは、 への呼び出しが および の呼び出しexitをトリガーしrm ~/anaconda3/.../rm ~/PyCharm/....エラーが発生していることを示しているようです。すべてのディレクトリは、これらのプログラム (numpy など) 用にダウンロードしたパッケージの場所でもあるようです。以下を参照してください。

$ exit
rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory
...
...

解決済み

私の~/.bash_logoutファイルには、

find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \;

この行をコメントアウトすると、エラー メッセージが表示されなくなりました。すべての一時ファイルを検索して削除するようです。ただし、"core" という単語を含むディレクトリも検索して削除しようとします。これはシステムで事前に設定されていました。

答え1

man bash

  exit [n]
         [...]  A trap on EXIT is executed before the shell terminates.

このようなトラップは終了時にtmpfilesをクリーンアップするためによく使用されます。 https://stackoverflow.com/questions/687014/予期しない bash 終了時に作成された一時ファイルを削除する

次のように終了トラップを定義します (新しいシェルでより適切にテストするため)。

$ bash
$ trap "rm filetodelete" EXIT

定義された EXIT トラップを表示:

$ trap -p EXIT
trap -- 'rm filetodelete' EXIT

テスト:

$ exit
rm: cannot remove ‘filetodelete’: No such file or directory

も暗黙的に「呼び出される」可能性があることに注意してくださいexit。そのため、 の代わりにexitによってトラップをトリガーすることもできますkill -HUP $$

答え2

通常、手動で設定した場合、シェルの終了時にのみ実行が表示されます。ただし、インストールしたパッケージの 1 つに bash 終了シェル スクリプトが付属している可能性があります...

チェック;

~/.bash_logout

そこからスクリプト呼び出しが見つかるかもしれません。奇妙なものですが...

答え3

このexitコマンドは特別な内蔵シェル内のコマンド。シェル プロセスを終了する必要があるため、組み込む必要があります。

終了ステータスが指定されている場合はそのステータスでシェルを終了し、指定されていない場合は最後のコマンドの終了ステータスでシェルを終了します。

終了時に、シェルはトラップがあればそれを実行します。現在設定されているトラップについては、(Bourne のようなシェルの場合)EXITの出力を参照してください。trap

多くのシェルでは、シェルがログイン シェルとして呼び出された場合 (一部のシステム/ユーザーは、ターミナル エミュレーターがログイン シェルを起動するように構成します)、シェルに応じて~/.logout、、、などの特殊ファイルに格納されているコードや~/.zlogout~/.bash_logout場合によっては 内の対応するコードも実行されます/etc

これらのコマンドがどこから実行されているかを把握するために、set -xbefore 呼び出しを実行することができます。exit

答え4

exitは bash の「組み込み」コマンドなので、man exit役に立たないのも当然です。

適切なドキュメントは、マニュアル ページから、またはbash のman bash組み込みコマンド( ) を使用して取得できます。helphelp exit

$ help exit
exit: exit [n]
    Exit the shell.

    Exits the shell with a status of N.  If N is omitted, the exit status
    is that of the last command executed.
$

もし、あんたが本当に知りたいどうやって動作します。ソースをご覧ください:http://git.savannah.gnu.org/cgit/bash.git/tree/builtins/exit.def?h=bash-4.4

関連情報