我写过(好了,重新混合到达)这个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
语句时“捕获”(隐藏)错误?
免责声明:很抱歉这个长期的例子,但是当我缩短它时,我不可避免地要解释“我正在尝试做什么。”
答案 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
)改为stdout
(1
)。
答案 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
全部谢谢!