2>&1 的用法说明

布满荆棘的人生 2022-07-15 09:43 218阅读 0赞

出处:http://blog.sina.com.cn/s/blog\_5842daa30101enz5.html

经常关注linux脚本的人,一定看到过 2>&1这样的用法,最初一定不明白其中的含义以及为什么是这样的一种组合。昨天偶然间再次看到了这个 2>&1的写法,遂下决心搞明白其中的含义。

  1. 其实要弄清楚2>&1的含义,首先应当知道linux中有三种标准输入输出,分别是STDINSTDOUTSTDERR,对应的数字是012STDIN就是标准输入,默认从键盘读取信息;STDOUT是标准输出,默认将输出结果输出至终端,也就是显示器之类的东西;STDERR是标准的错误信息,默认也会显示在终端上。由于STDOUTSTDERR都会默认显示在终端上,为了区分二者的信息,就有了编号的012的定义,用1表示STDOUT2表示STDERR
  2. 下面举个例子:以rhce中的例子为例。
  3. 1、在系统中创建一个普通用户test
  4. 2、以普通用户登录,或者以root登录 su -test 切换至普通用户test
  5. 3、执行 find/etc -name passwd命令,默认会将命令的执行结果(STDOUT)与错误信息(STDERR)都输出至终端显示器。
  6. 4、体验一下编号12的作用,find /etc -name passwd >find.out2>find.err,这里会将STDOUTSTDERR分别存放至find.outfind.err中,该命令也可以写成下面三种形式,大家可以体会一下编号的意义。
  7. find /etc-name passwd 1>find.out 2>find.err
  8. find /etc-name passwd 2>find.err >find.out
  9. find /etc-name passwd 2>find.err 1>find.out
  10. 我个人理解就是find/etc -namepasswd的命令的执行结果输出正确的输出(STDOUT)被1接收,错误的信息(STDERR)被2接收。
  11. 5、若要将所有的输出及错误信息都显示出来,可以用&表示全部12的信息,例如:
  12. find /etc-name passwd &>find.all
  13. 6、有时候希望将错误的信息重新定向到输出,就是将2的结果重定向至1中就有了"2>1"这样的思路,如果按照上面的写法,系统会默认将错误的信息(STDERR2重定向到一个名字为1的文件中,而非所想的(STDOUT)中。因此需要加&进行区分。就有了2>&1 这样的用法,举例:
  14. find /etc-name passwd 2>&1 |less
  15. 7、有时候还能看到这样的用法:
  16. find /etc-name passwd &2>&1 |less
  17. 这里可以分解成
  18. find /etc-name passwd& 表示前面的命令放到后台执行。
  19. 2>&1|less 表示将错误信息重定向至标准输出,并用less进行分页显示。

发表评论

表情:
评论列表 (有 0 条评论,218人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysqlbinlog用法详细说明

    mysqlbinlog用于处理二进制日志文件的实用工具详解mysqlbinlog 从二进制日志读取语句的工具。在二进制日志文件中包含的执行过的语句的日志可用来帮助从崩溃中恢

    相关 cron表达式用法详细说明

    cron表达式有至少6个(秒、分、时、日、月、星期)用空格隔开 7.年份(1970-2099) 其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(...