Всегда ли код выхода tar 123 означает пустой архив? - PullRequest
0 голосов
/ 03 января 2019
[root@my-pc: ]# printf "" | xargs tar czf ./foo.tgz
tar: empty archive
[root@my-pc: ]# echo $?
123
[root@my-pc: ]# 

Страница man tar содержит только коды возврата 0, 1 и 2, но поясняет:

Если подпроцесс, который был вызван tar, завершился с ненулевым значением код выхода, сам tar также завершает работу с этим кодом. Это может случиться, например, если использовалась опция сжатия (например, -z) и Программа внешнего компрессора не выполнена. Другой пример - ошибка rmt. во время резервного копирования на удаленное устройство.

Так что я предполагаю, что этот код возврата "123" происходит из некоторого вызванного подпроцесса.

Вопрос : всегда ли код выхода tar 123 означает пустой архив? (какой подпроцесс возвращает этот код?)

Что я пробовал :

1) Единственное, о чем я мог подумать, это strace, но я не достаточно опытен, чтобы сказать, показывает ли его вывод ответ на мой вопрос.

[root@my-pc: ]# printf "" | xargs strace tar czf ./foo.tgz 2>&1 | grep -w 123

Является ли вышеуказанный правильный способ запуска strace на tar? В любом случае команда не имела вывода.

Я могу включить выходные данные выше без окончательного grep, если это уместно, но я пока исключаю его, потому что он длинный, и мне не ясно, что он обязательно полезен

2) Поискал ТАК, ближайший хит, который я нашел, был это , но я не уверен, что это актуально (мне не ясно, что find / xargs участвует в коде возврата "123")

1 Ответ

0 голосов
/ 03 января 2019

С man xargs:

EXIT STATUS
       xargs exits with the following status:
       0 if it succeeds
       123 if any invocation of the command exited with status 1-125
       124 if the command exited with status 255
       125 if the command is killed by a signal
       126 if the command cannot be run
       127 if the command is not found
       1 if some other error occurred.

Таким образом, любой ненулевой статус выхода из tar заставит xargs tar использовать статус 123.

...