In bash, noto che se un comando che utilizza il reindirizzamento fallisce, tutti i programmi che vengono eseguiti prima non vengono eseguiti.
Ad esempio, questo programma apre il file "a" e scrive 50 byte nel file "a". Tuttavia, eseguendo questo comando con il reindirizzamento su un file con autorizzazioni insufficienti (~ root / log), non viene apportata alcuna modifica alle dimensioni del file di "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
Si potrebbe pensare che il programma verrebbe eseguito, catturare qualsiasi output (ma anche scrivere nel file "a"), e quindi non riuscire a scrivere qualsiasi output su ~ root / log. Invece il programma non viene mai eseguito.
Perché è questo e come fa bash a scegliere l'ordine dei "controlli" che esegue prima di eseguire un programma? Vengono eseguiti anche altri controlli?
ps Sto provando a determinare se un programma eseguito sotto cron effettivamente è stato eseguito quando reindirizzato a un file "permesso negato".
write_file.py
programma e invia il suo output a ~root/log
bash:" Mi dispiace, ma non ti è permesso scrivere su quel file! "La shell sta facendo esattamente quello che dovrebbe fare. Se non può fare quello che gli hai chiesto sì, ti informa immediatamente perché c'è un problema, dandoti l'opportunità di decidere come gestirlo. Per tutti i manutentori di bash, se si esegue quel comando e non si riesce a salvare l'output potrebbero accadere cose molto cattive. Se fosse abbastanza importante che tu avessi designato un posto per salvarlo, sarebbe sbagliato per ASS | U | ME che fosse OK correre senza salvare stdout.
stdout
per fare esattamente questo. Quindi, non vedrai alcun output, anche se il tuo programma è stato eseguito.