bash에서 리디렉션을 사용하는 명령이 실패하면 그 전에 실행되는 모든 프로그램이 실행되지 않습니다.
예를 들어이 프로그램은 "a"파일을 열고 "a"파일에 50 바이트를 씁니다. 그러나 권한이 충분하지 않은 파일 (~ root / log)로이 명령을 실행하면 파일 크기가 "a"로 변경되지 않습니다.
$ ./write_file.py >> ~root/log
-bash: /var/root/log: Permission denied
cdal at Mac in ~/experimental/unix_write
$ ls -lt
total 16
-rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES
프로그램이 실행되고 모든 출력을 캡처하고 ( "a"파일에 기록), ~ root / log에 출력을 쓰지 못할 것이라고 생각할 것입니다. 대신 프로그램이 실행되지 않습니다.
이것이 왜, bash는 프로그램을 실행하기 전에 수행하는 "검사"순서를 어떻게 선택합니까? 다른 점검도 수행됩니까?
추신 : cron에서 실행되는 프로그램이 "permission denied"파일로 리디렉션 될 때 실제로 실행되었는지 확인하려고합니다.
write_file.py
프로그램을 실행 하고 출력을 ~root/log
bash로 보냅니다 :"죄송 합니다만, 그 파일에 쓸 수 없습니다! "쉘은 정확히해야 할 일을하고 있습니다. 요청한 것을 수행 할 수 없다면 문제가 발생하는 이유를 즉시 알려 주어 문제를 처리하는 방법을 결정할 수있는 기회를 제공합니다 모든 배쉬 관리자는 아는 것처럼 명령을 실행하고 출력을 저장하지 않으면 매우 나쁜 일이 발생할 수 있습니다. 저장 장소를 지정하는 것이 중요하다면 ASS | U | ME에게 잘못 될 것입니다. stdout을 저장하지 않고 실행해도 괜찮습니다
stdout
정확하게 그렇게하도록 리디렉션 했습니다. 따라서 프로그램이 실행 되더라도 출력이 표시되지 않습니다.