Запустите команду в bash, если предыдущая команда была успешной, как bash решит, была ли команда успешной - PullRequest
2 голосов
/ 10 января 2020

При запуске этой строки: bash

ls file.txt && echo "Exists" || echo "Not exists"

Bash echos "Существует", если файл существует, и "Не существует", если он не существует. Таким образом, логика c - это

true && echo "Exists" || echo "Not exists"

Вопрос: как bash решает, успешна ли команда? Команда ls имеет 0 в качестве успешного кода выхода, как bash может интерпретировать, что 0 означает истину, в данном случае?

1 Ответ

4 голосов
/ 10 января 2020

Это просто соглашение для кодов выхода, которое работает практически для всех современных операционных систем для EXIT_SUCCESS

Если мы хотим сделать параллельный пример в Web, код возврата 404 означает страницу не найдено.
Также в этом случае выбор 404 - это просто соглашение.

В BASH, по сути, любой код выхода, который не равен 0, является своего рода ошибкой.

Вот полный список BASH зарезервированных кодов выхода:
http://tldp.org/LDP/abs/html/exitcodes.html#EXITCODESREF

" Почему конкретно 0?", вы можете спросить.

В C и C ++ программах главная функция имеет тип int и поэтому должна возвращать целочисленное значение. Возвращаемое значение главной функции считается «Выходным состоянием» приложения.
В большинстве операционных систем возвращение 0 - это статус успеха, очень краткий способ сообщить, что «Программа работала нормально».
В C ++ необязательно набирать «return 0;» в конце основной функции, потому что компилятор включает ее автоматически.

Специфик c logi c, реализованный в самой программе, объявляет, было ли выполнение программы нормальным или нет.

Например, я могу реализовать программу, которая позаботится об удалении файлов, и, если во время удаления файла возникнет ошибка, я верну -1, в противном случае в конце процесса удаления, в случае отсутствия ошибок / исключений, я вернусь 0.

Вы можете повеселиться и go проверить исходный код команд Linux, чтобы узнать больше.

Вот, например, ls .

Редактировать после комментария
Правая сторона && будет оцениваться только в том случае, если состояние выхода на левой стороне равно нулю (т. Е. Истинно).
С другой стороны, || противоположен, он будет оценивать правую сторону только в том случае, если состояние выхода левой стороны отличное от нуля (т. Е. Ложное). Поведение

BASH с 0 относится только к этому виду операторов.

Другими словами:

$ false && echo working

$ true && echo working
working
$ true || echo working

$ false || echo working
working
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...