На man-странице diff
я нашел эти значения выхода:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
Существуют ли разные значения выхода выше 1 для разных ошибок?
На man-странице diff
я нашел эти значения выхода:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
Существуют ли разные значения выхода выше 1 для разных ошибок?
Это зависит от вашей команды diff
. Mine (GNU diffutils 3.0) говорит:
Статус выхода
0
означает, что различия не обнаружены,1
означает некоторые были обнаружены различия, а2
означает проблему. Обычно различаются двоичные файлы считаются ошибками, но это можно изменить, используя-a
или--text
или-q
или--brief
.
Там, возможно, могут быть разные коды ошибок в зависимости от используемой вами версии diff. Если я правильно помню, стандартная BSD diff всегда возвращала код выхода из 0, 1 или 2.
Тем не менее, manpage не отображает все, что может сделать diff, но документацию, которую вы можете использовать для использования команды diff. В оболочке script я хочу знать, соответствуют ли файлы (exit = 0) или не совпадают (exit = 1). Однако в моей оболочке script я также хочу знать, что сама команда diff не работала.
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
echo "$file1 and $file2 are the same file"
elif [ $error -eq 1 ]
echo "$file1 and $file2 differ"
else
echo "There was something wrong with the diff command"
fi
Представьте, если мне сказали, что 2 означает, что команда diff не удалась, но более новая версия команды diff сделала различие между файлом, который вы не можете прочитать (exit = 2) и отсутствующим файлом (exit = 3). Теперь представьте, если бы я сделал следующее в более ранней версии команды diff, но $file2
не существовало:
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
echo "There was something wrong with the diff command"
elif [ $error -eq 1 ]
echo "$file1 and $file2 differ"
else
echo "$file1 and $file2 are the same file"
fi
В приведенном выше коде я проверил код ошибки 2 и 1, но не 3. Итак, вместо обнаружения отсутствующего файла я предполагаю, что файлы соответствуют.
Кадровая страница пытается удостовериться, что будущие обновления ОС не заставят большинство сценариев оболочки внезапно выйти из строя. Это объясняет, почему существуют отдельные команды awk
и nawk
и отдельная команда grep
и egrep
.
* Обновлено как комментарий от @chus.
В моем случае diff возвратил 127, искал его и нашел его в tldp.org "Коды выхода со специальными значениями"
127 "команда не найдена" незаконная команда Возможная проблема с $PATH или опечаткой.
Я использовал неправильный путь для diff.:)
Шрифт: tldp.org/LDP/abs/html/exitcodes.html