
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 '{}' \;
この行をコメントアウトすると、エラー メッセージが表示されなくなりました。すべての一時ファイルを検索して削除するようです。ただし、"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 -x
before 呼び出しを実行することができます。exit
答え4
exit
は bash の「組み込み」コマンドなので、man exit
役に立たないのも当然です。
適切なドキュメントは、マニュアル ページから、またはbash のman 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/builtins/exit.def?h=bash-4.4