일부 명령은 stdout에 잡음이 들리고 stderr에는 일부, 둘 중 하나는 모두 시끄러운 명령을 호출하는 스크립트가 있습니다. 나는 스크립트가 cron에 의해 실행되도록 의도했기 때문에 에러 상태에서만 매일 시끄러운 메일을 보내고 싶지 않습니다. 그래서 내가 할 :Bash + cron : 리디렉션 및 복원, stdout 및 stderr이 사용 권한을 거부 함
다음be_quiet() {
# save stderr in FD 3
exec 3>&2
exec &> /dev/null
}
die() {
# restore stderr
exec 2>&3
echo $* > /dev/stderr
exit 1
}
, 즉
be_quiet
mkdir -p $CLIENT_ROOT || die "Could not create client root."
cd $CLIENT_ROOT || die "Could not cd to client root."
의도가 그렇지 않으면 오류, 아무것도 나오지 않는 경우 나 특정 의미 - 투 - 나 메시지를 얻을 것. 하지만 지금보고있는 것은
line 48: /dev/stderr: Permission denied
명령 줄에서 실행하면됩니다. cron을 통해 실행될 때 권한 거부 메시지를 제공합니다. 나는 이유가 확실하지 않다. 대신
exec 2>&3
의
'exec 3> & 2'이 (가) 정확합니까? stderr는 보통 '2'입니다. –
이것은/dev/stderr에 대한 쓰기 권한이 없음을 의미합니다. cron 작업이 대화 형 쉘과 동일한 사용자 및 그룹 ID로 실행됩니까? .profile의 특정 그룹 (아마도 tty)으로 자동 전환합니까? –
> exec 3> & 2가 맞습니까? 예. 앞에서 말했듯이 이것은 대화식으로 실행될 때 작동합니다. 스크립트보십시오 메아리 "표시 1">>/디바이스/열려진 간부 3> 및 2 간부 및>/디바이스/널 "보이지 않는">>/디바이스/열려진 간부 2> 및 3 에코 에코 "Visible 2">>/dev/stderr 다시 말하지만 이것은 대화식으로 작동하지만 cron을 통해 실패합니다. > cron 작업이 대화 형 셸과 동일한 사용자 및 그룹 ID로 실행됩니까? 예. > .profile의 특정 그룹으로 자동으로 전환합니까? No. – arantius