<1>
>&2 即 1>&2 也就是把结果输出到和标准错误一样;之前如果有定义标准错误重定向到某log文件,那么标准输出也重定向到这个log文件
如:ls 2>a1 >&2 (等同 ls >a1 2>&1)
把标准输出和标准错误都重定向到a1,终端上看不到任何信息。
第一种情况:标准正确输出(有>&2)====》
[[email protected] test]# ls 2>a2>&2 等同于 #ls >a2
[[email protected] test]# ls
a1 a2 core txt
[[email protected] test]# cat a2 //ls输出的是标准正确输出,(2>a2)之前如果有定义标准错误重定向到某log文件,那么标准输出也重定向到这个log文件(>&2)
a1
a2
core
txt
----------------------------------------------------------------------------------------------------------------------------
第二种情况:标准正确输出(无>&2)====》
[[email protected] test]# ls 2>a3
a1 a2 a3 core txt
[[email protected] test]# ls
a1 a2 a3 core txt
[[email protected] test]# cat a3
----------------------------------------------------------------------------------------------------------------------------
第三种情况:标准错误输出(有>&2)====》
[[email protected] test]# ls
core txt
[[email protected] test]# ls sdfji 2>a1 >&2
[[email protected] test]# ls
a1 core txt
[[email protected] test]# cat a1
ls: cannot access sdfji: No such file or directory //2即标准错误输出.
第四种情况:
[[email protected] test]# ls >a2 >&2 //有>&2则正确输出不会重定向到文件.
a1 a2 core txt
第五种情况:
[[email protected] test]# ls &>a2 >&2 //这个情况和第1种情况相同(在是标准错误输出时),(在是标准正确输出时)和第四种情况相同.
[[email protected] test]# ls
a1 a2 core txt
[[email protected] test]# cat a2
a1
a2
core
txt
----------------------------------------------------------------------------------------------------------------------------
总结:加上>&2 表示之前如果是"标准错误重定向"到某log文件,那么"标准正确输出"也重定向到这个log文件;如果是"标准正确重定向"到某文件,则不会重定向到这个log文件,“标准正确输出”会正常输出. //即之前是错误的,现在正确也记录到里面;之前是正确的,现在也正确输出.
代码示例请参考下一篇《service xx status》之service脚本解析