gpt4 book ai didi

shell - 如何在shell脚本中双管道后执行多个命令

转载 作者:行者123 更新时间:2023-12-04 22:58:34 28 4
gpt4 key购买 nike

我正在编写一个 Korn shell 脚本,其中有一个这样的函数

#!/bin/ksh
myfunc() {
some_command1 || return 1
some_command2 || return 1
...
}

换句话说,我将双管道放在后面跟一个 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,第一个返回语句总是被执行。成功或失败。


#!/bin/ksh
myfunc() {
some_command1 || (echo "error while doing some_command1"; return 1)
some_command2 || (echo "error while doing some_command2"; return 1)
...
}

也不起作用,它似乎只从子进程返回而不是函数和 some_command2无论如何都要执行 some_command1成功或失败。

有没有办法对语句进行分组 echo "error while doing some_command2"; return 1只有当前面的命令失败时,它们才会一起执行。

最佳答案

直接的方法是使用 { ...; ...; } ,这将组合命令而不创建子shell。

some_command1 ||
{ echo "error while doing some_command1"; return 1; }

不过,我确实建议对错误消息使用 stderr:
some_command1 ||
{ echo "error while doing some_command1" >& 2; return 1; }

正因为我可以,我会给你我的 secret 捷径:
some_command1 ||
return 1 $(echo "error while doing some_command1" >& 2)

最后一点是非常规的,但仍然是可移植的 POSIX shell。

关于shell - 如何在shell脚本中双管道后执行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972887/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com