linux - 如何设法使 stderr 消息不在控制台中打印?

标签 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>&-

kill $pid

wait $pid 2>/dev/null

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

非常感谢任何愿意提供帮助的人!

最佳答案

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

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

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

您还可以更激烈地关闭作业控制(这在脚本中可能正是您想要的):

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

关于linux - 如何设法使 stderr 消息不在控制台中打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21187357/

相关文章:

regex - 如何使用 sed 命令从文件中删除包含特定字符串的行

email - 捕获和邮寄 bash 脚本错误

c# - NancyFX/Linux/Mono - 大型上传(超过 1MB)适用于 Windows 服务器,但不适用于 Linux

c# - Mono,asp.net C#和MVC的操作方法和教程

PHP 和 Redis - 性能 - PHP 是一个瓶颈

docker - Kubernetes-安装容器标准输出标准错误日志

makefile - 如何解开并行 make -j 编译器消息?

c++ - 当库已经在/usr/local/lib 中时找不到共享库

linux - 如何使用 Bash Shell 检查 Java 版本?

shell - 如何在建立 mosh 连接时运行复杂的命令?