최상의 답변
A2A에 감사드립니다.
Anmol Vishwakarma가 중요합니다.
우리가 사물을 원근감있게 파악해야합니다.
- / etc / profile, ~ / .bash\_rc , 및 ~ / .bash\_profile 은 모두 파일이며 c 구성 스크립트라고합니다. 변수 선언, 내보내기 변수, 메일 또는 뉴스 확인과 같은 로그인시 실행되는 명령, umask 설정 등을 포함 할 수 있습니다. 사용자가하는 일반적인 작업은 $ PATH에 디렉터리 추가, 변수 내보내기, $ PS1 변경, 표시 색상 설정, 인사말 문자 메시지 추가 등입니다.
- / etc / profile 은 선행 점으로 표시되는 것처럼 기본적으로 숨겨져 있으므로 bash\_profile 이 아니라 실제로는 .bash\_profile )입니다.
- 로그인 할 때 (로컬 또는 원격으로) 로그인 쉘이라고하며 약간 처리됩니다. 일반적인 쉘 호출과 약간 다릅니다. 이 경우 / etc / profile 파일 (있는 경우)이 실행되고 그 후에 ~ /.bash\_profile 또는 ~ / .bashrc 파일이 순서대로 실행됩니다.
- 대화 형 쉘의 경우, 즉 셸의 stdin 및 stderr 가 모두
TTY, ~ / .bash\_profile 파일은 실행되지 않지만 ~ / .bashrc is.
- 비대화 형 셸의 경우, 즉 stdin / stderr 중 하나 또는 둘 모두가있는 쉘은 TTY가 아니므로 구성 스크립트가 실행되지 않습니다. .
- 로그인 셸에서 로그 아웃시 ~ / .bash\_logout 파일 (있는 경우)이 실행됩니다.
- POSIX에 따라 stderr ( stdout 아님) 셸이 대화 형인지 확인하는 스트림입니다. stderr 가 리디렉션되는 경우 -i 가 지정되지 않는 한 대화 형 셸이 아닙니다. 쉘 호출. stdout 은 동일한 효과가 없습니다.
답변
그건 내 의견이지만 (현재 셸 프로세스를 종료하는) 쉘 함수의 컨텍스트에서 exit
가 return
( 현재 함수), 함수 본문의 코드에 의해 치명적인 조건이 감지되면 현재 스크립트를 종료하는 셸 함수에 코드를 작성할 수 없습니다. 보다 구조화 된 프로그래밍 언어에서 런타임 assert()
(또는 이와 동등한 것)에 대한 호출을 생각해보십시오.
대신에 할 수있는 것은 호출자에게 오류 코드를 반환하는 것입니다.
사실, 치명적 오류로 갑자기 종료하는 것은 확실히 최고의 프로그래밍 스타일이 아닙니다 (Subversion의 libsvn
는 한때 다음과 같은 이유로 매우 나쁜 평판을 얻었습니다. 라이브러리의 코드로 인해 사용하는 프로그램이 갑자기 종료되어 호출 코드가 사용자에게 알리거나 오류 복구를 시도 할 기회가 없습니다).
하지만 치명적인 오류를 감지 할 때 갑자기 종료 할 수 있다는 것은 예상되는 조건에서 작동하는 솔루션을 개발하는 데있어 상당히 실용적 이며 셸 프로그래밍 (따라서 GNU Bash 프로그래밍도 포함)은 항상 간단하고 실용적인 솔루션 은 가능한 모든 스펙을 신중하게 처리하는 복잡한 솔루션이 아닙니다. l 경우 (C, Tcl, Perl, Python 또는 PowerShell 등 다른 많은 도구 / 언어가 있습니다.)
누군가 Bourne 쉘 스크립트를 사용하는 이유도 위에서 언급 한 도구 / 언어를 사용하는 대신 첫 번째 장소는 전자를 사용하는 것이 후자를 사용하는 것보다 실제로 유용한 작업을 수행하는 것을 조합하는 것이 훨씬 쉽기 때문입니다. 한때 쉘 스크립팅을 통해 사용자가 거의 동일한 구문을 사용할 수 있다고 가정했습니다. 매일 대화식으로 사용하는 도구이므로 이미 익숙한 것입니다.
당신은 다음과 같이 질문했습니다. bash에 내장 된 return명령은 셸 기능이 있지만 왜 “exit”명령이 셸 기능에 충분하지 않습니까?