一种常见的方式是:
die() {
IFS=' ' # make sure "$*" is joined with spaces
# output the arguments if any on stderr:
[ "$#" -eq 0 ] || printf '%s\n' "$*" 1>&2
exit 1
}
然后您可以像这样使用它:
mkdir -p some/path || die "mkdir failed with status $?"
或者,如果您希望它包含退出状态,则可以将其更改为:
die() {
last_exit_status=$?
IFS=' '
printf '%s\n' "FATAL ERROR: $* (status $last_exit_status)" 1>&2
exit 1
}
然后使用它会容易一些:
mkdir -p some/path || die "mkdir failed"
当它失败时,mkdir
可能已经发出了一条错误消息,因此第二个消息可能被视为冗余消息,您可以执行以下操作:
mkdir -p some/path || exit # with the same (failing) exit status as mkdir's
mkdir -p some/path || exit 1 # with exit status 1 always
(或使用die
上面的第一个变体,不带参数)
万一您以前从未见过command1 || command2
,它会运行command1
,如果command1
失败,它将运行command2
。
因此,您可以像“创建目录或终止目录”那样阅读它。
您的示例如下所示:
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
或者,您可以dies
在右侧进一步对齐,以使主代码更加明显。
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
或在命令行较长时在以下行上:
mkdir -p some/path ||
die "mkdir failed"
cd some/path ||
die "cd failed"
some_command ||
die "some_command failed"
另外,如果要some/path
多次使用该名称,请将其存储在变量中,这样就不必继续键入它,并且可以根据需要轻松地对其进行更改。并且在将变量参数传递给命令时,请确保使用--
选项定界符,以使参数以开头的选项不被视为选项-
。
dir=some/path
mkdir -p -- "$dir" || die "Cannot make $dir"
cd -P -- "$dir" || die "Cannot cd to $dir"
some_command || die "Cannot run some_command"