如何设置不在控制台中打印stderr消息?

时间:2014-01-17 13:34:24

标签: linux shell stderr

我目前正在编写一个脚本,除其他外,必须杀死一些进程。

我使用了kill方法并且它工作得很好,除了当我启动我的脚本时,在控制台中打印一些不需要的消息,说明它们已被“终止”的每个进程。

我不知道如何摆脱这些信息,所以我会感激任何可以帮助我的人。

我希望这些消息不要在控制台内打印,因为它们可能会产生误导。如果我理解正确,那些是在stderr流中打印的错误消息。

有没有办法阻止这些日志在控制台中打印?

我在这个网站上发现了三个与我的相似的问题,并提出了三个不同的解决方案:

kill -9 $pid &> /dev/null
exec 3>&2
exec 2> /dev/null
kill $pid &> /dev/null
exec 2>&3
exec 3>&-
  

杀死$ pid

     

等待$ pid 2> / dev / null

但遗憾的是,这些解决方案都没有改变我脚本的行为(我总是有“终止”消息)。有没有人有任何其他想法?我对Linux比较陌生,并且还没有掌握输出的重定向,所以也许我忘记了一些非常明显的东西?

非常感谢任何想要帮助的人!

1 个答案:

答案 0 :(得分:3)

使用子shell来启动进程并转移子shell的输出:

pid=$(sleep 10 >/dev/null 2>&1 & echo $!)
kill $pid

问题是启动 shell将监视并注意其子节点的终止并报告它。

您也可以更加激烈并关闭作业控制(在脚本中可能就是您想要的):

set +m
sleep 3 & pid=$!
kill $pid