Труъ Bash
Each command executes in turn, provided that the previous command has given a return value of true (zero). At the first false
(non-zero) return, the command chain terminates (the first command returning false is the last one to execute).
Цитата из «Advanced
Добавлено чуть позже: ладно, я
Комментарии 35
!0 — False
Всё так? :)
И в
http://www.rsdn.ru/article/winshell/batanyca.xml#EHBAE
Совершенно нелогично, что «A && B» должно выполнить «B», если «A» вернуло ноль, не так ли?
Ну это не повод считать, что 0 это true :)
Второй коммент.
Комментарий для Евгения Степанищева:
true оно называется для того, чтобы логические выражения типа «A && B» оперировали обычными для них понятиями «true» и «false». Ведь именно такими значениями оперируют логические выражения. Да, более точный смысл — «success» и «fail», но какая разница?
Комментарий дляmaxim-zotov.livejournal.com:
Да, Капитан :) Вот именно это и нелогично.
Ну тогда уже не «пусть bash умрет», а пусть авторы «Advanced
bash как раз тут ведет себя абсолютно логично — его авторы не писали что «zero» это «true»…
Да ну, херовый же шел. Он жив потому, что везде есть и на нём многое принято писать.
Комментарий для deniszh2.ya.ru:
Тем не менее, по операциям «&&» и «||» получается, что «0» это «true»
Например, PowerShell. zsh хорош.
Я немного троллю, да. Но вообщеexit-коды это пережиток прошлого.
Oops… А если сейчас попробовать?
Ну и вообще согласен с предыдущими ораторами — не должен баш отвечать за ляпы или спорные моменты в авторов Advanced Scripting Guide
Это правда :) Я немного троллю :)
Современный шел вообще таким заморачиваться не должен. Исключения и их обработка.
Сам баш можно убить вот за что:
Этокак-бы тонкая полуправда на границе с ложью.non-existent-file | grep -v 'bad' > result
Например, такая команда завершится без ошибки и выполнение продолжится
cat
P.S. мечтаю юзать PowerShell в *nix.
P.P.S. Гробить написанный коммент, если юзер забыл написать openId — невежливо.
А я и не гроблю. Разве что ошибкакакая-то могла случится. Можно подробнее симптомы?
FF4
Отправляю комментарий я незаполненным именем.
Получаю назад пустую форму и «Ошибка: Введите адрес вашего сайта или блога»
Комментарий дляsad-wind.ya.ru:
Правильный пример:
cat
Но после магической строки
set -o pipefail
этот пример работает логично, выдает FAILED.
Комментарий дляsad-wind.ya.ru:
Ох, mea culpa. Буду править.
Ну, тоже не удивили. Попробуйте ещё:
$a = null;
$a++;
var_dump($a);
Это известное исключение (ну, известное тем, кто руководство по языку хоть раз читал, конечно). В PHP сюрпризов много, кто бы спорил. Но у bash сейчас вообще достоинств нет, кроме распространённости.
Ну дык и про exit status и ||, && в баше то же ж известно.
Единственный язык, который не «должен умереть» — Pascal. Хотя я отдаю себе отчёт что это у меня детская любовь.
А Pascal чем плох, кроме многословности? Java, вон, куда более многословна.
Паскаль хорош, о чём я и говорю.
Да, но к тому времени я уже любил Pascal.