Есть рекомендации использовать следующие варианты, чтобы сделать Bash неудачу быстро:Bash неудачу быстрые функции
set -o errexit
set -o nounset
set -o pipefail
Эти варианты, однако, не работает, как ожидалось для функций Bash, который поступает через ||
.
E.g. в сценарии
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
my_function() {
test -z "$1"
echo "this SHOULD NOT be printed"
}
my_function 1 || echo "???" # 1
my_function 1 # 2
echo "this will not be printed"
Line # 2
заставит скрипт завершается с кодом 1 без какого-либо выхода. Это то, чего я ожидаю.
Линия # 1
смущает меня на самом деле: my_function
будет успешно завершена, печать «этого НЕ ДОЛЖНА быть напечатана» и возврата кода 0, таким образом, «???» не будет напечатано.
Как я могу сделать Bash для обработки my_function
на линии # 1
такой же неудачный быстрый способ, как на линии # 2
?
Просто из любопытства, где вы видели эти рекомендации? –