다음 (약간 어리석은) 스크립트 이름 'test1.sh'를 고려하십시오.
#/bin/bash
#
sleep 10 &
echo sleep pid = $!
pkill sleep
실행하면 에코의 출력뿐만 아니라 bash가 stderr에서 수면의 죽음에 대한보고를받습니다.
$ ./test1.sh
sleep pid = 3551
./test1.sh: line 5: 3551 Terminated sleep 10
이 경우 stderr로 출력을 억제하고 싶습니다. 다음과 같이 명령 줄에서 할 수 있다는 것을 알고 있습니다.
$ ./test1.sh 2> /dev/null
...하지만 스크립트 내 에서 그것을 억제하는 방법이 있습니까? (두 번째 스크립트로 래핑하고 래퍼가 리디렉션하도록 할 수 있지만 더 쉬운 것이 있어야합니다 ...)
네가 옳아; pkill이 메시지를 생성하지 않고 bash가 있습니다. 당신은 그것을 제안합니다
$ ./test1.sh 2> /dev/null
가능한 해결책입니다. UVV가 지적했듯이 스크립트 내에서 동일한 작업은 다음과 같습니다.
exec 2> /dev/null
이렇게하면 /dev/null
다시 변경 될 때까지 스크립트에 대한 stderr 이이 명령문에서로 리디렉션 됩니다. 다시 변경하는 서투른 방법은 다음과 같습니다.
exec 2> /dev/tty
stderr을 터미널로 리디렉션합니다. 이것은 아마도 원래 있었던 곳일 것입니다 (반드시 그런 것은 아닙니다).
또는
exec 2>&1
stderr을 stdout과 동일하게 설정하고 잘못되었을 가능성이 있습니다.
더 안정적인 방법은
exec 3> & 2 exec 2> / dev / null (stderr를보고 싶지 않은 부분을 수행하십시오.) exec 2> & 3
원본 stderr을 파일 설명자 3에 저장하고 나중에 복원합니다.
프로세스 종료 알림 만 억제하는 다른 방법은 다음과 같습니다.
(sleep 10 & pkill sleep) 2> /dev/null
과
{ sleep 10 & pkill sleep;} 2> /dev/null
그룹화 된 명령에 대해서만 stderr을 변경합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다