【发布时间】:2023-03-31 06:57:01
【问题描述】:
我正在编写一个 Korn shell 脚本,其中有这样的功能
#!/bin/ksh
myfunc() {
some_command1 || return 1
some_command2 || return 1
...
}
换句话说,我将双管道放在返回语句后,以便在命令失败时函数立即返回。
但我也希望它在返回之前打印一些错误消息,我试过了
#!/bin/ksh
myfunc() {
some_command1 || echo "error while doing some_command1"; return 1
some_command2 || echo "error while doing some_command2"; return 1
...
}
但它不起作用,无论some_command1成功或失败,第一个return语句总是被执行。
还有
#!/bin/ksh
myfunc() {
some_command1 || (echo "error while doing some_command1"; return 1)
some_command2 || (echo "error while doing some_command2"; return 1)
...
}
也不起作用,它似乎只从子进程而不是函数返回,并且无论some_command1成功还是失败,some_command2都会被执行。
有没有办法对语句echo "error while doing some_command2"; return 1 进行分组,这样它们只有在前面的命令失败时才会一起执行。
【问题讨论】:
-
{ cmd1; cmd2; }也许? -
我喜欢那个函数的风格——首先排除异常,避免嵌套 ifs。