Этот перевернутый мир характерен для ошибок процесса.Переменная оболочки $?
сообщает о возвращаемом значении предыдущей программы для выполнения из оболочки, поэтому легко определить, успешно ли выполняется программа или нет:
$ false ; echo $?
1
$ true ; echo $?
0
Это было выбрано из-за наличия единственногослучай, когда программа завершается успешно, но может быть множество причин, по которым программа дает сбой - позволяя иметь много разных кодов ошибок, программа может определить , почему другая программа завершилась неудачно, не анализируя вывод.
Конкретным примером является программа aa-status
, поставляемая с AppArmor инструмент обязательного контроля доступа :
Upon exiting, aa-status will set its return value to the
following values:
0 if apparmor is enabled and policy is loaded.
1 if apparmor is not enabled/loaded.
2 if apparmor is enabled but no policy is loaded.
3 if the apparmor control files aren't available under
/sys/kernel/security/.
4 if the user running the script doesn't have enough
privileges to read the apparmor control files.
(я уверен, что естьэто более распространенные программы с таким поведением, но я хорошо это знаю. :)