En bash, me doy cuenta de que si falla un comando que usa la redirección, los programas que se ejecutan antes no se ejecutan.
Por ejemplo, este programa abre el archivo "a" y escribe 50 bytes en el archivo "a". Sin embargo, ejecutar este comando con redirección a un archivo con permisos insuficientes (~ root / log), no produce cambios en el tamaño del archivo de "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
Uno podría pensar que el programa se ejecutaría, capturaría cualquier salida (pero también escribiría en el archivo "a") y luego no podría escribir ninguna salida en ~ root / log. En cambio, el programa nunca se ejecuta.
¿Por qué es esto y cómo elige bash el orden de los "controles" que realiza antes de ejecutar un programa? ¿Se realizan también otras verificaciones?
ps Estoy tratando de determinar si un programa ejecutado bajo cron se ejecutó realmente cuando se lo redirigió a un archivo de "permiso denegado".
write_file.py
programa y envíe su salida a ~root/log
bash:" Lo siento, ¡pero no tiene permiso para escribir en ese archivo! "El shell está haciendo exactamente lo que debe hacer. Si no puede hacer lo que le pidió hazlo, te informa inmediatamente por qué hay un problema, dándote la oportunidad de decidir cómo lidiar con él. Para todos los mantenedores de bash saben, podrían ocurrir cosas muy malas si ejecutas ese comando y no puedes guardar la salida. Si fuera lo suficientemente importante como para designar un lugar para guardarlo, sería un error que ASS | U | ME estuviese bien correr sin guardar stdout.
stdout
para hacer exactamente eso. Por lo tanto, no verá ningún resultado, aunque su programa se haya ejecutado.