fra*_*ans 4 bash if-statement subshell
看看这个小脚本:
#!/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 $?
Run Code Online (Sandbox Code Playgroud)
我试图执行此处建议的操作(不要错过引入子 shell 的额外括号),但我没有do_something单独执行该函数(在我的例子中),而是与 if 表达式一起执行。
现在当我运行if ! do_something该set -e命令时似乎没有效果。
谁可以给我解释一下这个?