web-dev-qa-db-ja.com

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

誰かが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の「コア」が含まれるディレクトリを見つけて削除することも試みます。これはシステムのプリセットでした。

14
arie64

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

小切手;

〜/ .bash_logout

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

20
mikejonesey

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 $$によってトラップをトリガーすることもできます。

25
rudimeier

exitコマンドは、シェルの特別なbuilt-inコマンドです。シェルプロセスを終了する必要があるため、組み込みにする必要があります。

シェルがある場合は終了ステータスが表示され、それ以外の場合は最後のコマンドの終了ステータスが表示されます。

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

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

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

10

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

3
Michel Billaud