В bash я заметил, что если команда, использующая перенаправление, потерпит неудачу, любые программы, которые выполняются до этого, не запускаются.
Например, эта программа открывает файл «а» и записывает 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 выбирает порядок «проверок», которые он выполняет перед выполнением программы? Другие проверки также выполняются?
ps Я пытаюсь определить, действительно ли программа, запущенная под cron, запускалась при перенаправлении в файл «запрещен доступ».
write_file.py
программу и отправьте ее вывод ~root/log
bash:« Извините, но вы не можете записывать в этот файл! »Оболочка делает именно то, что должна делать. Если она не может сделать то, что вы просили Это немедленно сообщает вам, почему возникает проблема, и дает вам возможность решить, как ее решить. Для всех, кто поддерживает bash, очень плохие вещи могут произойти, если вы запустите эту команду и не сохраните вывод. Если бы это было достаточно важным вы обозначили место , чтобы сохранить его, было бы неправильно ASS | U | ME это было нормально работать без сохранения STDOUT.
stdout
чтобы сделать именно это. Таким образом, вы не увидите никакого вывода, даже если ваша программа работала.