关于shell的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
sdzbzyc
V2EX    Linux

关于shell的问题

  •  < href="Javascript:" Onclick="downVoteTopic(77180);" class="vote">
  •   sdzbzyc 2013-07-28 00:02:52 +08:00 3815 次点击
    这是一个创建于 4458 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ping -c 1 -w 1 ${network}.${sitenu} &> /dell/null && result=0 || result=1

    请问,里面数据重定向输出到空设备后,返回的是什么?是执行0还是执行后面1

    无论能不能ping通,都可以成功输出到空设备,那只有执行后面的0了,搞不明白
    12 条回复    1970-01-01 08:00:00 +08:00
    013231
        1
    013231  
       2013-07-28 01:50:00 +08:00   1
    你的理解是的. 重定向只是定出到什地方, 不把失的命令成成功的. 在例子中, 重定向不影返回值.
    0racleTink
        2
    0racleTink  
       2013-07-28 01:57:03 +08:00 via iPad   1
    能通就是1反之就是0
    sdzbzyc
        3
    sdzbzyc  
    OP
       2013-07-28 10:03:10 +08:00
    @013231
    感谢回复
    是不是可以这样理解,ping -c 1 -w 1 ${network}.${sitenu} &> /dell/null 是0还是1取决于能不能ping通,而与&> /dell/null重定向没有关系。
    sdzbzyc
        4
    sdzbzyc  
    OP
       2013-07-28 10:05:41 +08:00
    @sophy 嗯 有点懂了
    xdays
        5
    xdays  
       2013-07-28 10:32:18 +08:00
    动手验证下呗
    echo -e "aa\nbb" > /tmp/foo.txt; grep cc /tmp/foo.txt >/dev/null && echo 0 || echo 1; grep aa /tmp/foo.txt>/dev/null && echo 0 || echo 1
    013231
        6
    013231  
       2013-07-28 10:36:15 +08:00
    @sdzbzyc 是的. `echo $?`可以看到上一命令的返回值, 你就知道了.
    axios@gentoo ~ $ ping notExist
    ping: unknown host notExist
    axios@gentoo ~ $ echo $?
    2
    axios@gentoo ~ $ ping notExist &> /dev/null
    axios@gentoo ~ $ echo $?
    2
    由此可,然第二次ping通重定向把信息影藏起了, 但不影像返回值.
    013231
        7
    013231  
       2013-07-28 10:42:34 +08:00
    s/影像/影/
    LazyZhu
        8
    LazyZhu  
       2013-07-28 11:06:28 +08:00   1
    @sdzbzyc @sophy 反了
    能通是0反之是1

    这里涉及到了了Shell命令的逻辑符的优先级及作用
    && 逻辑与,遇false退出
    || 逻辑或,遇true退出
    013231
        9
    013231  
       2013-07-28 11:37:11 +08:00   1
    @LazyZhu 要再充一下, 於大部分程言, 0假, 非零真; 但於bash正好相反, 0(行成功)真, 非零(行失)假.
    darasion
        10
    darasion  
       2013-07-28 11:59:34 +08:00   1
    命令或程序的返回值,是程序运行完毕或退出时放在寄存器里返回给内核的状态,跟重定向没关系,也没办法重定向。shell做布尔判断的就是这个东西。

    能重定向的是:标准输入,标注输出,标准错误,它们都是文件描述符,是进程打开的文件(屏幕中断也是设备文件)的代号。

    大概是这个意思吧。
    darasion
        11
    darasion  
       2013-07-28 12:00:59 +08:00
    @darasion 中断->终端
    sdzbzyc
        12
    sdzbzyc  
    OP
       2013-07-28 22:27:27 +08:00
    @013231
    @xdays
    @LazyZhu
    @darasion
    谢谢各位,受教了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2729 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:02 PVG 08:02 LAX 17:02 JFK 20:02
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86