종료 명령은 Unix 터미널에서 어떻게 작동합니까? 주 시겠습니까? 검색 man exit 하고 which

누군가 exit유닉스 터미널에서 명령이 어떻게 작동 하는지 설명해 주 시겠습니까?

검색 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”라는 단어가 포함 된 디렉토리를 찾아 삭제하려고 시도합니다. 이것은 시스템에서 사전 설정되었습니다.



답변

일반적으로 수동으로 구성한 경우 셸을 종료 할 때만 실행됩니다. 그러나 설치 한 패키지 중 하나에 bash exit shell script가 제공되었을 수 있습니다 …

검사;

~ / .bash_logout

어쩌면 거기에서 스크립트 호출을 찾을 수 있습니다. 이상한 것입니다 …


답변

man bash

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

이러한 트랩은 종종 종료시 tmpfile을 정리하는 데 사용됩니다 (
/programming/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명령은 쉘 의 특수 내장 명령입니다. 쉘 프로세스를 종료해야하므로 내장되어 있어야합니다.

종료 명령이있는 경우 제공된 종료 상태 또는 마지막 명령의 종료 상태로 쉘을 종료합니다.

종료하면 쉘은 EXIT트랩 을 실행 합니다 (있는 경우). trap현재 설정된 쉘에 대한 출력 (본느 쉘에서)을 참조하십시오 .

쉘이 (일부 시스템 / 사용자가 로그인 쉘을 시작하는 터미널 에뮬레이터를 구성) 로그인 쉘로 호출 된 경우 많은 껍질, 그것은 또한 같은 특수 파일에 저장되어있는 코드를 실행 ~/.logout, ~/.zlogout, ~/.bash_logout아마도에서 사람을 해당 /etc쉘에 따라 .

해당 명령이 실행되는 위치 set -x를 파악 exit하기 위해 호출 하기 전에 수행 할 수 있습니다.


답변

exitbash의 “내장”명령이므로 man exit도움이 되지 않습니다.

매뉴얼 페이지 man bash에서 또는 helpbash ( 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을


답변