首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stdout问题

stdout问题
EN

Stack Overflow用户
提问于 2016-02-26 21:02:44
回答 2查看 224关注 0票数 1

我在设计一个shell bash脚本。它具有很多功能,其中之一就是检测网卡是否处于监控模式。不确定是否有一种“专业”的方法来做到这一点。我的基本方法是有效的,但有一个问题。是下一个功能:

代码语言:javascript
复制
function monitor() {

    WIFI="wlan0" #hardcoded wlan0 for the example
    mode=`iwconfig $WIFI|cut -d ' ' -f 6`

    if [[ $mode == "Mode:Monitor" ]]; then
        echo "Your interface $WIFI is in monitor mode already"
        return
    fi
    #Here is the rest of the function... not relevant
}

问题是在屏幕上打印命令的标准输出,我不想在屏幕上打印任何内容。因此,我想的第一个方法是将stdout重定向到/dev/null,这样做:

代码语言:javascript
复制
mode=`iwconfig $WIFI|cut -d ' ' -f 6 > /dev/null 2>&1`

但如果我那样做,它就会停止工作.我认为这是因为它需要stdout将一个命令输送到另一个命令来工作。

如果我选择一个已经监控模式卡,一切都是好的。问题是,如果网络接口没有处于监视模式(例如,eth0),它会打印以下内容:

eth0没有无线扩展。

我能做些什么来使用标准的管道和防止在屏幕上打印任何东西?

提前谢谢你。

干杯。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-26 21:10:54

静默stderriwconfig命令(使用2> /dev/null重定向):

代码语言:javascript
复制
iwconfig $WIFI 2> /dev/null | cut -d ' ' -f 6
票数 2
EN

Stack Overflow用户

发布于 2016-02-26 21:07:39

> /dev/null 在命令替换中不包括,因为它将阻止捕获变量mode中的任何内容。

如果您的意图是捕获标准输出和静默 stderr中的变量$mode

代码语言:javascript
复制
mode=`iwconfig "$WIFI" 2>/dev/null | cut -d ' ' -f 6 `

如果您的意图是捕获,那么 stdout和stderr,正如您的解决方案尝试所建议的那样:

代码语言:javascript
复制
mode=`iwconfig "$WIFI" 2>&1 | cut -d ' ' -f 6 `

注意:正如@nsilent22 22在评论和their answer中所指出的,或的placement在这里是至关重要的:是iwconfig可能产生stderr输出,因此必须将重定向应用于它,而不是cut

通常,如果您希望将重定向应用于管道作为一个整体,则可以使用命令分组;例如:

代码语言:javascript
复制
mode=`{ iwconfig "$WIFI" | cut -d ' ' -f 6; } 2>/dev/null`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35661694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档