gpt4 book ai didi

shell - 选择性抑制输出保留退出代码

转载 作者:行者123 更新时间:2023-12-03 08:58:45 25 4
gpt4 key购买 nike

我有一个foo程序,可以

  • 成功;
  • 打印Failure并失败;
  • 或打印其他内容而失败。

  • 我有一个由cron运行的简短脚本 foo && bar。情况2几乎总是这样,因此我的邮箱中充斥着来自cron的“失败”消息。

    我想停止获取“失败”通知,以保留来自成功消息以及来自其他消息的失败通知。

    我试图编写一个bash函数 wrap_foo,其行为类似于 foo,但不显示 Failure。像这样:
    wrap_foo() {
    foo | grep -vF "Failure"
    }
    wrap_foo && bar

    但是它总是失败,因此,如果 bar成功,就不会执行 foo

    一种方法似乎是对 $(foo)进行相等性测试,但由于输出可能很长,我想尽可能避免使用它。

    我应该使用 mktemp并在其中重定向 foo输出吗?如果没有更简便的方法,在删除临时文件后,如何保存 foo故障状态并进行恢复?

    这是一个测试套件:
    foo_failed() {
    echo Failed
    false
    }

    foo_false() {
    echo Error
    false
    }

    foo_true() {
    echo Something
    true
    }

    bar() {
    echo bar
    true
    }

    wrap_foo()
    {
    $1 | grep -vF Failed
    }

    run() {
    wrap_foo $1 && bar
    }

    echo should not write anything
    run foo_failed
    echo should write Error
    run foo_false
    echo should write Something then bar
    run foo_true

    这是带有临时文件的解决方案:
    wrap_foo()
    {
    T=$(mktemp)
    $1 >$T
    X=$?
    grep -vF Failed $T
    rm $T
    return $X
    }

    可以更短吗?

    最佳答案

    使用您的测试套件,我将wrap_foo()函数修改为以下内容,它似乎可以正常工作:

    wrap_foo()
    {
    foooutput=$($1)
    foostatus="$?"
    echo "$foooutput" | grep -vF Failed
    return "$foostatus"
    }

    输出:
    should not write anything
    should write Error
    Error
    should write Something then bar
    Something
    bar

    它只是短了一点点,但没有涉及临时文件。

    关于shell - 选择性抑制输出保留退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14579163/

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