Como o redirecionamento é processado antes que o comando associado seja executado, se o redirecionamento falhar, o comando não será executado.
Então, para
./script.sh >$output
para executar o script com êxito, mesmo que o redirecionamento para o arquivo em $output
falhe, primeiro teríamos que detectar se seria possível fazer o redirecionamento manualmente.
O redirecionamento será bem-sucedido se o arquivo de saída já existir e for gravável pelo usuário atual. Ele também seria bem-sucedido se o usuário tiver permissões de execução e gravação no diretório em que $output
deve ser criado (e executar permissões em todos os diretórios intermediários no caminho).
Essas duas coisas podem ser testadas por touch
:
if ! touch "$output" 2>/dev/null; then
output=/dev/null
fi
./script.sh >$output
Aqui, redirecionamos a saída para /dev/null
se o arquivo de saída padrão não for utilizável. Você pode usar, por exemplo, /dev/stdout
no lugar de /dev/null
se você, em vez de descartar a saída, quiser ir para a saída padrão.