Shell 에서 전체 스 크 립 트 를 종료
cat >test.sh<''
#!/bin/bash
exit_script(){
exit 1
}
echo "before exit"
exit_script
echo "after exit"
EOF
chmod a+x test.sh
./test.sh
echo $?
#
before exit
1
직접 사용
exit
하면 스 크 립 트 를 종료 할 수 있 고 오류 코드 를 매개 변수 로 전달 할 수 있 습 니 다.다음은 대본 을 조금씩 바 꿔 보 겠 습 니 다.존재 하 는 문제
cat >test.sh<''
#!/bin/bash
exit_script(){
exit 1
}
echo "before exit"
:|exit_script
echo "after exit"
EOF
chmod a+x test.sh
./test.sh
echo $?
#
before exit
after exit
0
(|)
에서 exit_script
함 수 를 실행 하면 전체 스 크 립 트 를 종료 하지 않 습 니 다!이 유 는 exit
가 있 는 Shell
만 종료 할 수 있 고
에서 실 행 된 명령 / 함 수 는 모두 독립 된 Shell(Sub-Shell)
에서 실 행 된 것 이기 때문에 위 스 크 립 트 의 프로 세 스 트 리 는 다음 과 같 습 니 다. PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
17510 26959 26959 26959 pts/0 14049 Ss 0 0:00 \_ -bash
26959 13843 13843 26959 pts/0 14049 S 0 0:00 | \_ /bin/bash ./test.sh
13843 13844 13843 26959 pts/0 14049 S 0 0:00 | | \_ :
13843 13845 13843 26959 pts/0 14049 S 0 0:00 | | \_ /bin/bash ./test.sh
13845 13846 13843 26959 pts/0 14049 S 0 0:00 | | \_ exit 1
위 에서 아래로 각 PID 의 의 미 는 다음 과 같다.
PID
설명 하 다.
26959
... / test. sh 가 있 는 Shell
13843
파이프 중: 새로 연 Shell
13844
명령
13845
파이프 중 exit셸 새로 생 긴 셸
13846
exit 명령
trap 과 kill 을 사용 하여 스 크 립 트 전 체 를 종료 합 니 다.
cat >test.sh<''
#!/bin/bash
export TOP_PID=$$
trap 'exit 1' TERM
exit_script(){
kill -s TERM $TOP_PID
}
echo "before exit"
:|exit_script
echo "after exit"
EOF
chmod a+x test.sh
./test.sh
echo $?
#
before exit
1
여기 서 먼저 스 크 립 트 의 메 인 프로 세 스
(trap)
TERM
신호: 메 인 프로 세 스 가 TERM
신 호 를 받 으 면 실 행 됩 니 다 exit 1
.Sub-Shell
에서 스 크 립 트 메 인 프로 세 스에 TERM
신 호 를 보 내 면 전체 스 크 립 트 를 종료 할 수 있 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.