Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“我怎么能?”;尝试做某事,然后检测是否失败;在bash?_Bash_If Statement_Try Catch - Fatal编程技术网

“我怎么能?”;尝试做某事,然后检测是否失败;在bash?

“我怎么能?”;尝试做某事,然后检测是否失败;在bash?,bash,if-statement,try-catch,Bash,If Statement,Try Catch,在对上一个问题的回答中: 建议“尝试做某事并检测是否失败”,而不是“检查权限然后做某事” 我已经找到了很多这样做的理由,例如: 然而,关于如何在bash中实现try/catch,我发现很少有明确的信息。我想这太容易了,除了我发现的似乎相当复杂——使用函数或其他脚本: 我对bash相对来说比较陌生,但对其他语言中没有类似于try函数的简单函数感到困惑 具体而言,我想做以下工作: CMD=`./path/to/script.sh` if [ <echo $CMD | grep

在对上一个问题的回答中:

建议“尝试做某事并检测是否失败”,而不是“检查权限然后做某事”

我已经找到了很多这样做的理由,例如:

然而,关于如何在bash中实现try/catch,我发现很少有明确的信息。我想这太容易了,除了我发现的似乎相当复杂——使用函数或其他脚本:

我对bash相对来说比较陌生,但对其他语言中没有类似于
try
函数的简单函数感到困惑

具体而言,我想做以下工作:

CMD=`./path/to/script.sh`
if [ <echo $CMD | grep error is true> ]; then
        .. do this ..
else 
        .. do that ..
fi   
CMD=`./path/to/script.sh`
如果[];然后
.. 这样做。。
其他的
.. 那样做。。
fi
这将选择一个在成功时不会造成损害的操作(影子密码文件不应是可执行的;您可以执行类似于
chmod o-w/
-从根目录中删除公共写入权限的操作,如果愿意的话),并通过查看命令的退出状态检查该操作是否有效。这将丢弃错误消息-您必须决定这是否重要


“sudo”是用来提升特权的;如果您认为用户应该已经是“root”,则省略“sudo”。

Bash取决于退出状态,因此没有任何与之相当的
try/catch
。但它仍然能够满足您的需求

对于简单的情况,可以使用

[[ your_test_expression ]] && commands
这相当于

if [[ your_test_expression ]]; then
    commands
fi
If
使用[…]的“退出状态”,因此实际上您可以在
If
之后使用任何命令。只需确保您的控制逻辑取决于命令的退出状态


对于复杂的情况,您仍然需要ifcase语句来表达您的逻辑。

除非您正在调用的脚本具有退出条件,否则您将无能为力。但是,请在bash手册页中查找“set”

set -e
如果脚本中的简单命令失败,将导致脚本退出。您可以将其添加到示例中script.sh的顶部,以便在失败时退出

再看看陷阱。我相信

trap 'exit 2' ERR
与此类似

相关:
trap 'exit 2' ERR