【问题标题】:Shell script error handlingShell 脚本错误处理
【发布时间】:2015-01-08 04:36:05
【问题描述】:

我正在清理脚本的输出。例如:

rm -f ./file

没有这样的文件或目录

我想对该命令实现一些错误检查,相当于try/catch 语句。换句话说,如果命令失败,我想捕获错误。

【问题讨论】:

  • rm -f blahblahblah 不会在我的系统上打印错误消息。它在你的身上吗?什么系统?
  • 只是提示:搜索set -etrap...

标签: linux bash shell scripting


【解决方案1】:

Python:

try:
    os.remove('./file')
    champagne_for_everybody
except:
    throw_myself_in_the_river

壳牌:

if rm ./file
then
    champagne_for_everybody
else
    throw_myself_in_the_river
fi

注意事项:

  • 不要使用-f - POSIX rm 在使用-f 时会忽略丢失的文件。
  • 如果可以避免,请不要使用 shell。 Python 和其他现代语言具有更多更复杂的内置错误处理功能。

【讨论】:

    【解决方案2】:

    为什么不使用简单的脚本?

    file=$1
    if [ ! -f $file ]; then
        echo "File not found!"
    else 
        rm -f $file
    fi
    

    当你运行它时,脚本会告诉你给定的文件是否不存在。

    您还可以在 echo 命令后使用 2>&1 重定向到 stderrstdout。您也可以在 if 语句的末尾添加exit 1,因为退出状态为 1 通常表示该命令未成功执行。

    这不会以您想要的确切方式工作,但在 bash 中,这是检测错误的最接近的方式。

    【讨论】:

      【解决方案3】:

      使用set -e 或者您可以使用&&|| 实现相同的行为

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 2016-03-27
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多