Não estou ciente de uma situação em que tar
produzirá /dev/null
para sinalizar um erro, que é como seu código tenta detectar o erro. Esta é a maneira correta de verificar erros:
if tar -cf Archiv.tar myfolder/ myotherfolder/
then
echo "success"
else
echo "error - no such Directory or file"
fi
Você provavelmente não precisa do else
caso porque tar
se queixará nesse caso. Se o uso de /dev/null
deveria suprimir tar
reclamações para que você possa substituir sua própria mensagem, a primeira linha deve ser:
if tar -cf Archiv.tar myfolder/ myotherfolder/ > /dev/null 2>&1
Observe que não estamos usando colchetes aqui. Isso é na verdade um alias para um comando de shell interno chamado test(1)
que faz operações lógicas e retorna 0 ou diferente de zero para sinalizar sucesso ou falha, respectivamente. if
, por sua vez, verifica esse retorno 0 / diferente de zero, portanto, para verificar o sucesso de um programa como tar
que retorna falha diferente de zero, você não precisa envolver test
ou seu alias [
.
Se você foi treinado em uma linguagem de programação que requer algum tipo de pontuação em torno da expressão if
para que a falta de pontuação incomode você aqui, você pode reescrever a primeira linha assim:
tar -cf Archiv.tar myfolder/ myotherfolder/
if [ $? = 0 ]
Essas duas linhas juntas fazem a mesma coisa com a versão acima, porque a variável incorporada do shell $?
contém o código de status do último programa executado.
Isso talvez seja mais claro, mas um pouco desperdício.