Мне неизвестна ситуация, когда 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 ]
Эти две строки вместе делают то же самое в версии выше, потому что встроенная переменная оболочки $?
содержит код состояния последнего запуска программы.
Это, возможно, понятнее, но немного расточительно.