Использование bash 4.1.5:
#!/bin/bash
set -e
foo()
{
false
echo "argh, I don't want to get there! What about set -e?!"
}
foo && echo "ok"
Это приводит к следующему выводу:
argh, I don't want to get there! What about set -e?!
ok
Эта проблема возникает всякий раз, когда foo
вызывается как условие (то есть внутри if
, while
, &&
, ||
и т. Д.).foo
ведет себя корректно, если вызывается как простая команда.
Я считаю это поведение удивительным и откровенно опасным, поскольку это означает, что поведение функции bash изменяется в зависимости от того, как она вызывается.Например, даже такие простые вещи, как foo
и foo && true
будут , а не , дадут те же результаты.Это очень беспокоит!Можно только представить, какой хаос это может вызвать, если foo
выполняет чувствительные операции ...
Есть ли какой-нибудь обходной путь, который я мог бы использовать, чтобы избежать такой ситуации?