Взгляните на этот маленький скрипт:
#!/bin/bash
function do_something() {(
set -e
mkdir "/opt/some_folder" # <== returns 1 -> abort?
echo "mkdir returned $?" # <== sets $0 to 0 again
rsync $( readlink -f "${BASH_SOURCE[0]}" ) /opt/some_folder/ # <== returns 23 -> abort?
echo "rsync returned $?" # <== sets $0 to 0 again
)}
# here every command inside `do_something` will be executed - regardless of errors
echo "run do_something in if-context.."
if ! do_something ; then
echo "running do_something did not work"
fi
# here `do_something` aborts on first error
echo "run do_something standalone.."
do_something
echo $?
Я пытался сделать то, что было предложено здесь (не пропустите дополнительные скобки, вводящие под-оболочку), но Я не выполнял функцию (do_something
в моем случае) отдельно, но вместе с выражением if.
Теперь, когда я запускаю if ! do_something
, команда set -e
, кажется, не имеет никакого эффекта.
Может кто-нибудь объяснить мне это?