Little Bash Script: ловить ошибки? - PullRequest
0 голосов
/ 22 декабря 2009

Я написал (ну, ремикс, чтобы получить) этот скрипт 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 ]

2 голосов
/ 22 декабря 2009
# 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 голосов
/ 22 декабря 2009

Вы можете перенаправить 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) в stdout ( 1).

0 голосов
/ 22 декабря 2009

Для моих собственных заметок, вот мой новый код, использующий ответ Пола Криси:

# 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

Спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...