Little Bash Script:捕获错误?

时间:2009-12-22 13:46:03

标签: bash macos

我写过(好了,重新混合到达)这个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 个答案:

答案 0 :(得分:2)

您可以通过stderr之类的内容将stdout/dev/null重定向到pkill.sh > /dev/null 2>&1。如果您只想抑制kill命令的输出,请仅将其应用于该行,例如kill $X > /dev/null 2>&1;

这样做是将标准输出(stdout)从kill $X发送到/dev/null(即> /dev/null),另外发送stderr(将2)改为stdout1)。

答案 1 :(得分:2)

# 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 :(得分:0)

对于我自己的笔记,这是使用Paul Creasey的答案的新代码:

# 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

全部谢谢!