Unix 터미널에서 종료 명령은 어떻게 작동합니까?

Unix 터미널에서 종료 명령은 어떻게 작동합니까?

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.

이러한 트랩은 종료 시 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

일반적으로 수동으로 구성한 경우 쉘을 종료할 때만 실행이 표시됩니다. 하지만 설치한 패키지 중 하나가 bash 종료 쉘 스크립트와 함께 제공되었을 수도 있습니다.

확인하다;

~/.bash_logout

아마도 거기에서 스크립트 호출을 찾을 수 있을 것입니다. 그것은 이상한 것입니다...

답변3

명령 exit은 특별하다내장쉘에서 명령. 쉘 프로세스를 종료해야 하므로 내장되어야 합니다.

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

종료 시 쉘은 EXIT트랩이 있는 경우 이를 실행합니다. trap현재 설정된 것에 대해서는 (Bourne과 유사한 쉘에서) 의 출력을 참조하십시오 .

많은 쉘에서 쉘이 로그인 쉘로 호출된 경우(일부 시스템/사용자는 로그인 쉘을 시작하도록 터미널 에뮬레이터를 구성함) , 및 쉘에 따라 해당하는 특수 파일에 저장된 코드 도 실행 합니다 ~/.logout. .~/.zlogout~/.bash_logout/etc

set -x호출하기 전에 exit해당 명령이 실행되는 위치에 대한 아이디어를 얻을 수 있습니다.

답변4

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

적절한 문서는 매뉴얼 페이지 나 bash()의 man bash내장 명령을 통해 얻을 수 있습니다 .helphelp 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

관련 정보