fue*_*zig 17 bash return exit return-code
我想从另一个脚本中调用的BASH脚本返回退出代码,但也可以直接调用.它大致如下:
#!/bin/bash
dq2-get $1
if [ $? -ne 0 ]; then
echo "ERROR: ..."
# EXIT HERE
fi
# extract, do some stuff
# ...
Run Code Online (Sandbox Code Playgroud)
现在在行EXIT HERE
中脚本应该退出并返回退出代码1.问题是
return
,因为当我忘记使用脚本而不是调用它时,返回将不会退出,并且脚本的其余部分将被执行并弄乱.exit
,因为这会关闭shell.kill -SIGINT $$
,因为这不允许返回退出代码.有没有可行的替代方案我忽略了?
ImH*_*ere 17
问题标题的答案(不像其他答案在正文中那样)是:
在不关闭 shell 的情况下返回退出代码
(exit 33)
Run Code Online (Sandbox Code Playgroud)
如果您需要-e
激活并仍然避免使用非零退出代码退出 shell,请执行以下操作:
(exit 33) && true
Run Code Online (Sandbox Code Playgroud)
该true
命令永远不会执行,但用于构建一个不会被-e
shell 标志退出的复合命令。
这会在不退出 shell(也不是源脚本)的情况下设置退出代码。
对于更复杂的退出问题(使用特定的退出代码),无论是执行还是来源:
#!/bin/bash
[ "$BASH_SOURCE" == "$0" ] &&
echo "This file is meant to be sourced, not executed" &&
exit 30
return 88
Run Code Online (Sandbox Code Playgroud)
如果执行,将设置退出代码 30(带有错误消息)。
如果来源,则退出代码为 88。将退出双方的执行或不影响调用外壳采购。
您可以使用它x"${BASH_SOURCE[0]}" == x"$0"
来测试脚本是否被获取或调用(如果是sourced则为false,如果被调用则为true)return
或exit
相应的.
归档时间: |
|
查看次数: |
8213 次 |
最近记录: |