誰かがexit
コマンドがUnix端末でどのように機能するか説明してくれませんか?
_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 '{}' \;
この行をコメントアウトすると、エラーメッセージが表示されなくなりました。すべての一時ファイルを検索して削除するようです。ただし、Wordの「コア」が含まれるディレクトリを見つけて削除することも試みます。これはシステムのプリセットでした。
通常、手動で構成した場合は、シェルを終了したときにのみ実行が表示されます。しかし、インストールしたパッケージの1つにbash exitシェルスクリプトが付属している可能性があります...
小切手;
〜/ .bash_logout
そこからスクリプト呼び出しが見つかるかもしれませんが、それは奇妙なものです...
man bash
exit [n] [...] A trap on EXIT is executed before the Shell terminates.
このようなトラップは、終了時にtmpfilesをクリーンアップするためによく使用されます。参照 https://stackoverflow.com/questions/687014/removing-created-temp-files-in-unexpected-bash-exit
次のように終了トラップを定義します(新しいシェルでのより良いテストのため):
$ 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 $$
によってトラップをトリガーすることもできます。
exit
コマンドは、シェルの特別なbuilt-inコマンドです。シェルプロセスを終了する必要があるため、組み込みにする必要があります。
シェルがある場合は終了ステータスが表示され、それ以外の場合は最後のコマンドの終了ステータスが表示されます。
終了すると、シェルはEXIT
トラップを実行します。現在設定されているものについては、trap
(Bourneのようなシェルの場合)の出力を参照してください。
多くのシェルでは、シェルがログインシェルとして呼び出された場合(一部のシステム/ユーザーがターミナルエミュレーターを構成してログインシェルを開始する)、~/.logout
、~/.zlogout
などの特別なファイルに格納されたコードも実行します、~/.bash_logout
、およびシェルに応じて/etc
の対応するもの。
exit
を呼び出す前にset -x
を実行して、これらのコマンドがどこから実行されているかを知ることができます。
exit
はbashの「組み込み」コマンドなので、不思議ではありませんman exit
は役に立ちません。
マニュアルページから適切なドキュメントを入手できますman bash
、または組み込みコマンドhelp
with bash(help 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