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.