代码之家  ›  专栏  ›  技术社区  ›  Dan Rosenstark

小bash脚本:捕捉错误?

  •  0
  • Dan Rosenstark  · 技术社区  · 15 年前

    我已经写了(好吧,再混合一下)这个bash脚本

    # pkill.sh
    trap onexit 1 2 3 15 ERR
    
    function onexit() {
        local exit_status=${1:-$?}
        echo Problem killing $kill_this
        exit $exit_status
    }
    
    export kill_this=$1
    for X in `ps acx | grep -i $1 | awk {'print $1'}`; do
      kill $X;
    done
    

    它工作正常,但任何错误都会显示在显示屏上。我只想要 echo Problem killing... 以防出错。如何在执行时“捕获”(隐藏)错误 kill 声明?

    免责声明: 很抱歉举了这么长的例子,但是当我把它们缩短的时候,我不可避免地要解释“我想做什么”。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Paul Creasey    15 年前
    # pkill.sh
    trap onexit 1 2 3 15 ERR
    
    function onexit() {
        local exit_status=${1:-$?}
        echo Problem killing $kill_this
        exit $exit_status
    }
    
    export kill_this=$1
    for X in `ps acx | grep -i $1 | awk {'print $1'}`; do
        kill $X 2>/dev/null
        if [ $? -ne 0 ]
        then
            onexit $?
        fi
    done
    
        2
  •  2
  •   Hank Gay    15 年前

    你可以重定向 stderr stdout /dev/null 通过类似的方式 pkill.sh > /dev/null 2>&1 . 如果只想抑制 kill 命令,仅将其应用于该行,例如, kill $X > /dev/null 2>&1;

    它所做的是发送标准输出( 标准输出 kill $X /DEV/NULL (那就是 > /dev/null )并另外发送 标准错误 (the 2 进入 标准输出 (the 1 )

        3
  •  0
  •   Dan Rosenstark    15 年前

    对于我自己的注释,这里是我使用保罗·克雷西的答案的新代码:

    # pkill.sh: this is dangerous and should not be run as root!
    trap onexit 1 2 3 15 ERR
    
    #--- onexit() -----------------------------------------------------
    #  @param $1 integer  (optional) Exit status.  If not set, use `$?'
    function onexit() {
        local exit_status=${1:-$?}
        echo Problem killing $kill_this
        exit $exit_status
    }
    
    export kill_this=$1
    for X in `ps acx | grep -i "$1" | awk {'print $1'}`; do
      kill $X 2>/dev/null
    done
    

    谢谢大家!