/ / Unix командата е неуспешна, но все още връща статус 0 - shell, unix

Unix командата се провали, но все още върне статус 0 - shell, unix

unzip /test_data/sample.ZIP -d /data/Traget/
if [ "$?" = 1 ]; then
echo " Unzipping of files failed"
exit 1
fi

Скриптът архивира данни и се опитва да напишена посоченото място, но директорията / data / Traget / няма достъп до запис и следователно скриптът се проваля. Може ли някой да ви помогне

Благодаря ти

Отговори:

0 за отговор № 1

То е много по-просто:

set -e
set -o pipefail

unzip /test_data/sample.ZIP -d /data/Target/

Всички Bash скриптове, които пишете, трябва да започват с тези две опции. Това, което правят, е да прекратят скрипта с грешка, ако някоя команда не успее.

Това е обратното на гнуснотоПри грешка възобновете следващата"от VBA, ако някой си спомни това!

Но ако наистина трябва да напишете повтарящ се код за обработка на грешки навсякъде, ще го направите по следния начин:

if ! unzip /test_data/sample.ZIP -d /data/Traget/; then
echo " Unzipping of files failed"
exit 1
fi

0 за отговор № 2

Трябва да обърнете логиката си. unzip връща 0 при успех и произволен брой изходни кодове при грешка. Така го направи:

unzip /test_data/sample.ZIP -d /data/Traget/
if [ "$?" -ne 0 ]; then
echo " Unzipping of files failed"
exit 1
fi

Лесно можете да проверите какъв unzip се връща и вие echo $? след командата искате да знаете статуса на изход от.

Ето какво се случва, когато изпълня подобна команда:

$ unzip dd.zip  -d /tmp/a/b/
Archive:  dd.zip
error:  cannot create /tmp/a/b/filename
Permission denied
$ echo $?
50

Така unzip връща 50, когато се провали по този начин.