Мне неизвестна ситуация, когда tar выдаст /dev/null чтобы сообщить об ошибке, именно так ваш код пытается обнаружить ошибку. Это правильный способ проверки на наличие ошибок:
if tar -cf Archiv.tar myfolder/ myotherfolder/
then
echo "success"
else
echo "error - no such Directory or file"
fi
Вам, вероятно, не нужен else случай, потому что сам tar будет жаловаться в этом случае. Если ваше использование /dev/null должно было подавить жалобы tar чтобы вы могли заменить свое собственное сообщение, тогда первая строка должна быть:
if tar -cf Archiv.tar myfolder/ myotherfolder/ > /dev/null 2>&1
Обратите внимание, что здесь мы не используем квадратные скобки. На самом деле это псевдоним для встроенной команды оболочки с именем test(1) которая выполняет логические операции и возвращает 0 или ненулевое значение, чтобы обозначить успех или неудачу соответственно. if в свою очередь, проверяет это 0/ ненулевое возвращение, поэтому для проверки успешности программы, такой как tar которая возвращает ненулевое значение при сбое, вам не нужно включать test или его псевдоним [ .
Если вы обучались языку программирования, который требует некоторой пунктуации вокруг выражения if так что отсутствие пунктуации беспокоит вас здесь, вы можете переписать первую строку следующим образом:
tar -cf Archiv.tar myfolder/ myotherfolder/
if [ $? = 0 ]
Эти две строки вместе делают то же самое в версии выше, потому что встроенная переменная оболочки $? содержит код состояния последнего запуска программы.
Это, возможно, понятнее, но немного расточительно.