Bash'da, yeniden yönlendirme kullanan bir komut başarısız olursa, bundan önce çalışan programların çalışmadığını fark ettim.
Örneğin, bu program "a" dosyasını açar ve "a" dosyasına 50 bayt yazar. Ancak, bu komutu yetersiz izinlere (~ root / log) sahip bir dosyaya yeniden yönlendirmeyle çalıştırmak, "a" dosya boyutunda herhangi bir değişiklik sağlamaz.
$ ./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
Biri programın çalışacağını, herhangi bir çıktıyı yakalayacağını (ama aynı zamanda "a" dosyasına yazdığını) düşünür ve sonra ~ root / log dosyasına herhangi bir çıktı yazamaz. Bunun yerine program asla çalıştırılmaz.
Bu neden ve bash bir programı yürütmeden önce gerçekleştirdiği "denetimlerin" sırasını nasıl seçiyor? Başka kontroller de yapılıyor mu?
ps "izin reddedildi" dosyasına yönlendirildiğinde cron altında çalışan bir programın gerçekten çalışıp çalışmadığını belirlemeye çalışıyorum.
write_file.py
Programı çalıştırın ve çıktısını ~root/log
bash'a gönderin :" Maalesef bu dosyaya yazmanıza izin verilmiyor! "Kabuk tam olarak ne yapması gerekiyorsa. İstediğiniz şeyi yapamazsa yapmak, neden bir sorun olduğunu hemen size bildirir, bununla nasıl başa çıkacağınıza karar verme fırsatı verir.Tüm bash koruyucular için, bu komutu çalıştırırsanız ve çıkışı kaydetmezseniz Çok Kötü Şeyler olabilir. Kaydetmek için bir yer belirlediyseniz yeterince önemli olsaydı, ASS | U | ME stdout'u kaydetmeden koşmanın sorun olmadığını
stdout
tam olarak bunu yapmak için yönlendirme yaptınız . Yani, programınız çalışsa bile herhangi bir çıktı görmeyeceksiniz.