Как ты знаешь, утилита false возвращает всегда ошибку (код завершения 1). Давай запустим и убедимся:
false
echo $?
1
Все правильно. В этом примере была запущена встроенная команда false в оболочку Bash. Но как мы знаем, существует альтернативная реальность и альтернативная команда false, которая лежит тут:
whereis false
false: /usr/bin/false
Теперь сделаем такое:
env false --help
Используя env, мы запустили альтернативную версию false. И что мы видим? Вывалилась страница help. Очевидно? Ага!
А теперь давай посмотрим код выхода, после вывода help.
echo $?
1
Чо блядь? Почему единица? Команда по выводу справки отработала корректно? Корректно! Ожидаем ноль? Ага! Но вот хуюшки! Получите единицу!
Баг? Не думаю. Давай проверим на выводе версии:
env false --version
echo $?
1
Неа, не баг, команда false настолько суровая, что возвращает единицу, там где это не нужно.
Всё дело в том, что во всех этих примерах в качестве кода выхода используется значение одной и той же константы.
Специально ли это сделали, никто не знает. Но факт остается фактом.
✔️ Посмотреть чем является команда, можно с помощью команды type:
type -a false
false is a shell builtin
false is /usr/bin/false
false is /bin/false
Вот такие вот перлы порой случаются. Ошибка и точка!
tags: #bash #linux
—
🔔 @bashdays