Em zsh
echo 'a string' > test.txt
echo $?
0
e
[[ $(echo 'a string') ]]
echo $?
0
enquanto
[[ $(echo 'a string' > test.txt) ]]
echo $?
1
outro exemplo
curl -so 'curl-8.2.1.tar.gz' https://curl.se/download/curl-8.2.1.tar.gz
echo $?
0
ou
[[ $(curl -so 'curl-8.2.1.tar.gz' https://curl.se/download/curl-8.2.1.tar.gz) ]]
echo $?
1
Minhas perguntas:
- Isso é por causa do redirecionamento de saída? Se não, o que está causando isso?
- Os comandos são executados com sucesso:
a string
aparecetest.txt
e curl baixa o arquivo para o arquivo de saída que especifiquei, por que a avaliação resulta emfalse
? - Existe uma maneira sensata de lidar com isso em scripts? Digamos que eu queira executar algum comando se o anterior foi executado com sucesso (mas
false
ainda retornou), como devo proceder? Eu poderia adicionar uma segunda verificação para ver se a linha apareceu ou se o arquivo foi baixado, mas a avaliação da execução bem-sucedida do comando não seria necessária em primeiro lugar.
Mais alguns exemplos de integridade (legibilidade vs. "correção"?):
if ( $(echo 'a string' > text.txt) ); then echo yes; else echo no;fi
yes
if (( $(echo 'a string' > text.txt) )); then echo yes; else echo no;fi
no
if $(echo 'a string' > text.txt); then echo yes; else echo no;fi
yes
if echo 'a string' > text.txt; then echo yes; else echo no;fi
yes