
openSUSE Tumbleweed имеет
test -s ~/.alias && . ~/.alias || true
как и его содержимое ~/.bashrc
.
Насколько я понимаю, часть слева || true
такова:
- есть проверка на
~/.alias
существование и размер больше нуля. - и, если условия соблюдены, файл загружается.
Так зачем это || true
нужно?
GNU bash, версия 5.0.16(1)-релиз (x86_64-suse-linux-gnu)
решение1
|| true
полезно в контекстах, где нас не волнует, завершится ли команда неудачей; в этом конкретном случае, если ~/.alias
не существует, test -s
произойдет сбой с ненулевым кодом завершения, но мы не хотим, чтобы это имело какие-либо другие последствия. || true
гарантирует, что полный список команд (включая sourcing ~/.alias
) всегда завершается с успешным статусом.
Это было бы особенно актуально, если бы .bashrc
был включен set -e
, хотя это было бы необычно для сценария запуска оболочки.
Другой способ написать это:
if test -s ~/.alias; then . ~/.alias; fi
но это приведет к выходу с ненулевым кодом выхода, если источник ~/.alias
вызовет ошибку.
Смотрите такжеЧем полезен шаблон «команда || true»?
решение2
Гарантирует || true
, что вся команда возвращает статус «Успешно», даже если ./.aliases
возвращает ненулевой статус (Неудача).
Удобно, если вы используете set -e
(выход при ошибке).