如何屏蔽nmcli network on命令的输出?
如何屏蔽nmcli network on命令的输出?
嘿,我完全懂你这种无奈——明明把命令的标准输出和错误都重定向到/dev/null了,那些ADDRCONF、网卡状态的消息还是顽固地蹦出来,对吧?
先给你说清楚原因:这些烦人的输出根本不是nmcli命令本身产生的,它们是内核或者udev这类系统组件直接打印到控制台(tty)的日志信息,普通的>/dev/null 2>&1重定向只对进程自己的stdout/stderr管用,管不到内核直接输出的内容。
给你几个可行的解决办法:
方法1:用script命令捕获所有终端输出
script命令会创建一个伪终端,能捕获所有原本会输出到屏幕的内容(包括内核的这些消息),然后我们把它的输出丢去/dev/null就行:
script -q -c 'sudo nmcli network off && sudo nmcli network on' /dev/null
这里的-q是让script自己别输出额外信息,-c后面跟着要执行的命令,最后指定输出文件为/dev/null。
方法2:结合nmcli的安静模式+脱离当前会话
先给nmcli加上-q(--quiet)参数抑制它自身的输出,再用setsid让命令在新的会话里运行,脱离当前终端,这样内核消息就不会打到当前屏幕了:
sudo nmcli -q network off && setsid sudo nmcli -q network on >/dev/null 2>&1
方法3:临时调整内核日志级别(谨慎使用)
如果上面的方法都不行,可以临时把内核日志级别调低,执行完命令再调回来:
# 先保存当前日志级别 current_level=$(sudo dmesg -n) # 把日志级别设为1(只显示紧急错误) sudo dmesg -n 1 # 执行你的命令 sudo nmcli network off && sudo nmcli network on # 恢复原来的日志级别 sudo dmesg -n "$current_level"
这个方法要注意,在调整级别期间,其他内核的重要消息也会被屏蔽,所以只适合临时使用。
备注:内容来源于stack exchange,提问作者Kymo Wang
相关产品推荐
相关产品推荐

