linux标准输出速懂手册

快速理解>, >>, <

  1. 输入输出的区别:

>>>都属于输出重定向,<属于输入重定向。

  1. 文件内容的区别:

>会覆盖目标的原有内容。当文件存在时会先删除原文件,再重新创建文件,然后把内容写入该文件;否则直接创建文件。

>>会在目标原有内容后追加内容。当文件存在时直接在文件末尾进行内容追加,不会删除原文件;否则直接创建文件。

命令含义
command > filename把标准输出重定向到新文件中
command 1> filename同上
command >> filename把标准输出追加到文件中
command 1>> filename同上
command 2> filename把标准错误重定向到新文件中
command 2>> filename把标准错误追加到文件中
  1. 输出重定向:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)。
  2. 输入重定向:命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备的输入。

如何理解 command 2>&1

首先 2>&1 ,这里的&符号可以理解为引用,&1就是引用标准输出的fd。这句话的意思就是把标准错误重定向到标准输出。

command 2>1command 2>&1的区别:

2>1 是会创建一个文件名称为1的普通文本文件,直接将标准错误写入这个文本文件。

所以可以看出2>&1就是合并输出到同一个位置的效果。

能否不合并,分2次输出到文件?

能否用command 1>log 2>log 来代替command 1>log 2>&1呢?

这2者有很大差别,第一种写法会打开文件两次,并导致stdout被stderr覆盖。第二种写法,只会打开一次文件,stderr会引用stdout,都会写入同一个文件内。

为何2>&1需要写在最后?

如果写成这样:command 2>&1 1>log,由于开始时stdout向终端输出,所以stderr引用了终端,导致stderr始终输出到终端,即使后面加了1>log,那也只是把stdout输出到log文件内,而stderr并没有得到更新,保持在了终端。

另外2种等价写法

&> >& ,这里没有什么特殊说明,就是当做一个整体缩写符号来看待,无法解释。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值