In Bash stelle ich fest, dass alle Programme, die zuvor ausgeführt wurden, nicht ausgeführt werden, wenn ein Befehl mit Umleitung fehlschlagen würde.
Beispielsweise öffnet dieses Programm die Datei "a" und schreibt 50 Bytes in die Datei "a". Wenn Sie diesen Befehl jedoch mit Umleitung zu einer Datei mit unzureichenden Berechtigungen (~ root / log) ausführen, ändert sich die Dateigröße von "a" nicht.
$ ./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
Man würde denken, das Programm würde laufen, jede Ausgabe erfassen (aber auch in die Datei "a" schreiben) und dann keine Ausgabe in ~ root / log schreiben. Stattdessen wird das Programm nie ausgeführt.
Warum ist das so und wie wählt bash die Reihenfolge der "Überprüfungen", die es vor der Ausführung eines Programms durchführt? Werden auch andere Prüfungen durchgeführt?
ps Ich versuche festzustellen, ob ein unter cron ausgeführtes Programm tatsächlich ausgeführt wurde, wenn es in eine Datei mit der Berechtigung "Berechtigung verweigert" umgeleitet wurde.
write_file.py
Programm aus und senden Sie seine Ausgabe an ~root/log
bash:" Entschuldigung, aber Sie dürfen nicht in diese Datei schreiben! "Die Shell tut genau das, was sie tun soll. Wenn sie nicht das tun kann, worum Sie es gebeten haben Wenn Sie dies tun, werden Sie sofort darüber informiert, warum ein Problem vorliegt, und Sie können entscheiden, wie Sie damit umgehen möchten. Nach Ansicht aller Bash-Betreuer können sehr schlimme Dinge passieren, wenn Sie diesen Befehl ausführen und die Ausgabe nicht speichern können. Wenn es wichtig genug wäre, dass Sie einen Ort zum Speichern festgelegt haben, wäre es falsch, ASS | U | ME zu verwenden. Es war in Ordnung, ohne Speichern von stdout zu laufen.
stdout
, um genau das zu tun. Sie sehen also keine Ausgabe, obwohl Ihr Programm ausgeführt wurde.