2016-08-19 2 views
1

Я создаю архив из сценария и хотел бы выполнить некоторые действия, если это не по какой-либо причине.Тар код выхода 0, несмотря на ошибку «Не удается открыть: нет такого файла или каталога»

код, чтобы проверить случай ошибки выглядит примерно так:

if ! sudo tar -zcf "/not/existing/dest.tar.gz" "/existing/archive/src/"; then 
    echo "Tar failed" 
fi 
echo "Tar exited with error code $?" 

Какие результаты следующий вывод:

tar (child): /not/existing/dest.tar.gz: Cannot open: No such file or directory 
tar (child): Error is not recoverable: exiting now 
Tar exited with error code 0 

Почему деготь, выходящем с кодом 0, несмотря на то, что, очевидно, не может ?

Некоторые более подробная информация:

OS: Ubuntu 16,04
деготь --version: деготь (GNU дегтя) 1,28
Судо --version: версия 1.8.16

+1

@Cyrus Если это не 0, то это должно быть эхом «Tar failed». – Barmar

ответ

1

$? берет свое значение из последней выполненной команды.

В последнем echo он берет его с предыдущего echo, который, конечно, выполняется правильно.

if ! sudo tar -zcf "/not/existing/dest.tar.gz" "/existing/archive/src/"; then 
    echo "Tar failed"     # if it fails 
fi         # | 
echo "Tar exited with error code $?" # | 
#        ^^_____| it comes here 
+0

Хм, кажется разумным с первого взгляда, но не полностью соответствует, так как «Tar failed» никогда не печатается. Поэтому команда 'echo" Tar failed "' никогда не выполняется и код ошибки является IMHO из самого tar. Я что-то упустил? – suamikim

+0

@suamikim хорошо пункт. Просто убедитесь, что если вы наберете 'sudo tar -zcf '/not/existing/dest.tar.gz" "/ existing/archive/src /" ', а затем' echo $? ', Вы получите 0 или что-то еще ? – fedorqui

+0

Да, 'echo $?' Непосредственно после того, как простая команда «tar» в консоли печатает '0' ... – suamikim

Смежные вопросы