В основному я зауважую, що якщо команда, що використовує переадресацію, не вдасться, будь-які програми, запущені до цього, не запускаються.
Наприклад, ця програма відкриває файл "a" і записує 50 байт у файл "a". Однак, запустивши цю команду з перенаправленням у файл з недостатніми дозволами (~ 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
щоб зробити саме це. Отже, ви не побачите жодного результату, навіть незважаючи на те, що ваша програма працювала.