首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要将输出重定向到/dev/null....在命令行中工作正常,但在shell中不能正常工作

需要将输出重定向到/dev/null....在命令行中工作正常,但在shell中不能正常工作
EN

Stack Overflow用户
提问于 2012-07-13 03:21:38
回答 4查看 2.1K关注 0票数 1

我需要在bash文件中编写一个execute some命令,并忽略输入。

示例

代码语言:javascript
复制
pvs --noheadings -o pv_name,vg_name,vg_size 2> /dev/null

上面的命令在命令行中工作得很好,但是当我在shell中编写相同的命令时,它会给我一个错误

喜欢

代码语言:javascript
复制
Failed to read physical volume "2>"
Failed to read physical volume "/dev/null"

我猜它看起来像是整个命令的一部分。你能给我一些如何整改的建议吗?

提前谢谢。

全码

#

代码语言:javascript
复制
main() {
    pv_cmd='pvs'
    nh='--noheadings'
    sp=' '
    op='-o'
    vgn='vg_name'
    pvn='pv_name'
    pvz='pv_size'
    cm=','
    tonull=' 2 > /dev/null '
    pipe='|'

    #cmd=$pv_cmd$sp$nh$sp$op$sp$vgn$cm$pvn$cm$pvz$sp$pipe$tonull  #line A
    cmd='pvs --noheadings -o vg_name,pv_name,pv_size 2> /dev/null' #line B
    echo -n "Cmd="
    echo $cmd
    $cmd

}

main

#---

如果你看一下A和B行,两个版本都在那里,尽管其中一个被注释掉了……

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-13 03:46:39

不能在带引号的字符串中包含2> /dev/null。在处理重定向之后,会删除报价。你要做的是

代码语言:javascript
复制
cmd='pvs --noheadings -o vg_name,pv_name,pv_size'
$cmd 2> /dev/null

重定向才能正常工作。

票数 2
EN

Stack Overflow用户

发布于 2012-07-13 04:15:08

按照您的方式,2>和/dev/null将被解析为参数。但是您希望2> /dev/null是bash代码,而不是程序参数,因此

而不是

代码语言:javascript
复制
 $cmd

你应该

代码语言:javascript
复制
 eval $cmd

事情就是这样的。

或者,如果回显是为了调试,您可以在命令之前设置-o xtrace,并在命令之后设置+o xtrace。并以正常的方式来完成,而不是填充字符串。

票数 1
EN

Stack Overflow用户

发布于 2012-07-13 03:47:20

我认为发生的情况是,行中有一些字符对我们来说是不可见的,或者>是一个与它看起来不同的字符。毕竟,外壳程序应该在命令看到重定向之前接受它,但是命令将2>/dev/null视为[PhysicalVolume [PhysicalVolume...]]。或者,重定向可以用引号传递(因此它失去了对shell的特殊意义并被传递),请参见chepner的答案。

代码语言:javascript
复制
tonull=' 2 > /dev/null '

才是问题所在。正如切普纳猜测的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11459100

复制
相关文章

相似问题

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