No bash, percebo que, se um comando usando o redirecionamento falhar, todos os programas executados antes dele não serão executados.
Por exemplo, este programa abre o arquivo "a" e grava 50 bytes no arquivo "a". No entanto, executar este comando com o redirecionamento para um arquivo com permissões insuficientes (~ root / log), não produz alterações no tamanho do arquivo "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
Alguém poderia pensar que o programa seria executado, capturar qualquer saída (mas também gravar no arquivo "a") e depois falhar em gravar qualquer saída no ~ root / log. Em vez disso, o programa nunca é executado.
Por que isso e como o bash escolhe a ordem das "verificações" antes de executar um programa? Também são realizadas outras verificações?
ps Estou tentando determinar se um programa executado no cron realmente foi executado quando redirecionado para um arquivo "permissão negada".
write_file.py
programa e envie sua saída para o ~root/log
bash:" Desculpe, mas você não tem permissão para gravar nesse arquivo! "O shell está fazendo exatamente o que deve fazer. Se não puder fazer o que você pediu , informa imediatamente por que há um problema, dando a você a oportunidade de decidir como lidar com ele.Para todos os mantenedores do bash, coisas muito ruins podem acontecer se você executar esse comando e não conseguir salvar a saída. Se fosse o suficiente importante que você designado um lugar para guardá-lo, seria errado ASS | L | ME foi OK para executar sem salvar stdout.
stdout
para fazer exatamente isso. Portanto, você não verá nenhuma saída, mesmo que seu programa tenha sido executado.