반대쪽 끝이 사라지면 쉘 스크립트는 표준 및 기타 파일 설명자를 잃을 수 있습니다. 이런 일이 발생할 수 있는 한 가지 방법은 ssh
스크립트를 시작하는 데 사용된 클라이언트를 종료하는 것입니다.
$ ssh localhost test
^C
그러면 bash
SSH를 통해 호출되는 스크립트가 시작되고 a를 사용하여 명령이 종료됩니다. 이는 연속을 종료하지는 않지만 첨부된 파일 설명자(예: 표준 입력/출력/오류)를 닫습니다.test
CtrlCssh
test
닫힌 파일 설명자를 사용 test
하려고 하면 SIGPIPE
.echo
표준 오류뿐만 아니라 systemd 로그에도 메시지를 기록하는 기능이 있을 test
수 있습니다 . 이 같은:log
echo
log() {
echo "$*" | systemd-cat -t test
echo >&2 "$*"
}
두 번째는 세션이 종료된 후 echo
a()를 발생시킵니다 . 문제 없이 실행이 계속되도록 서브셸에 넣으면 이러한 일이 발생하는 것을 방지할 수 있습니다.SIGPIPE
ssh
CtrlCecho
echo
( echo >&2 "$*" )
하지만 더 좋은 방법이 있나요?
답변1
스크립트에서 SIGPIPE를 무시하려면 다음을 수행할 수 있습니다.
trap "" PIPE