Dalam bash, saya perhatikan bahwa jika perintah menggunakan pengalihan akan gagal, program apa pun yang berjalan sebelum itu tidak dijalankan.
Misalnya, program ini membuka file "a" dan menulis 50 byte ke file "a". Namun, menjalankan perintah ini dengan pengalihan ke file dengan izin tidak mencukupi (~ root / log), tidak menghasilkan perubahan dalam ukuran file "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
Orang akan berpikir program akan berjalan, menangkap output apa pun (tetapi juga menulis ke file "a"), dan kemudian gagal menulis output apa pun ke ~ root / log. Sebaliknya program tidak pernah berjalan.
Mengapa demikian, dan bagaimana bash memilih urutan "cek" yang dijalankannya sebelum menjalankan suatu program? Apakah pemeriksaan lain dilakukan juga?
ps Saya mencoba untuk menentukan apakah suatu program yang dijalankan di bawah cron benar-benar berjalan ketika diarahkan ke file "izin ditolak".
write_file.py
program dan kirim hasilnya ke ~root/log
bash:" Maaf, tetapi Anda tidak boleh menulis ke file itu! "Shell melakukan apa yang seharusnya dilakukan. Jika tidak bisa melakukan apa yang Anda minta lakukan, itu segera memberitahu Anda mengapa ada masalah, memberi Anda kesempatan untuk memutuskan bagaimana menghadapinya. Untuk semua pemilik bash tahu, Hal-hal yang Sangat Buruk bisa terjadi jika Anda menjalankan perintah itu dan tidak bisa menyimpan output. Jika itu cukup penting, Anda menentukan tempat untuk menyimpannya, itu akan salah bagi ASS | U | ME, itu OK untuk berjalan tanpa menyimpan stdout.
stdout
untuk melakukan hal itu. Jadi, Anda tidak akan melihat output apa pun, meskipun program Anda berjalan.