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
ファイルに1行があります
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.
これらのトラップは、シャットダウン時にtmpファイルを整理するためによく使用されます。 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 $$
。
答え2
通常、このオプションを手動で構成すると、シェルを終了したときにのみ実行が表示されます。ただし、インストールしたパッケージの1つにbash exitシェルスクリプトが付属している可能性があります。
確認する。
~/.bash_logout
おそらくそこで奇妙なスクリプト呼び出しを見つけるでしょう。
答え3
このexit
コマンドは特別なコマンドです組み込みシェルのコマンドです。シェルプロセスを終了する必要があるため、組み込みが必要です。
これはシェルを終了し、終了状態(存在する場合)または最後のコマンドの終了状態を提供します。
終了すると、シェルはEXIT
トラップ(存在する場合)を実行します。現在の設定の出力を表示しますtrap
(Bourneなどのシェルから)。
多くのシェルでは、シェルがログインシェルとして呼び出されると(一部のシステム/ユーザーはログインシェルを起動するように端末エミュレータを設定します)、特殊ファイル(たとえば)に格納されているコードとシェル~/.logout
に対応するコード~/.zlogout
も実行します。~/.bash_logout
/etc
これらのコマンドが実行される場所を理解するために、呼び出すset -x
前にこれを実行できます。exit
答え4
exit
これはbashの「組み込み」コマンドなので、man exit
役に立たないのは当然です。
適切な文書は、man bash
マニュアルページまたはbash()組み込みコマンドを使用して取得できます。help
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/buildins/exit.def?h=bash-4.4