Linux的I/O重定向执行结果解惑(执行顺序)

面试题

常见面试会考到i/o重定向问题的时候,这个问题问倒了不少人,即使能回答上来的有些是靠猜的。网上看到一篇文章,博主基于作者的思想总结了一点感悟和技巧,来详细解释一下重定向最终执行过程。 如下面的面试题:

问 一下哪个命令执行结果与其他三个不一样 ? 为什么?
1.cmd > log 2>&1
2.cmd 2>&1 > log
3.cmd &> log
4.cmd 2>log >&2

重定向执行过程解释
1.cmd > log 2>&1

我们可以使用"指针"的形式来理解。 首先先确保大家都知道, Linux提供3种i/o设备。
0代表 标准输入(默认:键盘)
1代表 标准输出 (默认: 屏幕)
2代表标准错误 (默认: 屏幕)


我们用"->"代表指针指向。 首先 1->屏幕 然后 执行了 > log等价于(1>log,默认省略1)
那么此时 1->log。 后面的命令 2>& 可以理解问 2执行了1所在的地址(可以理解&符号类似c语言中的取地址符)。 那么此时 由原来的 2->屏幕 变为了 2->log 。 最终结果 :
1->log    2->log

2.cmd 2>&1 > log

由上面的推导过程继续看该条命令。 原来1->屏幕, 2>&1 表示 2指向1所在的地址 也就是 2->屏幕 。 接着命令 >log ,表示 1指向 log。 最后结果:
2->屏幕 1->log

3.cmd &> log

这个命令就不用解释了,官方提供的,直接用就是了。他代表的意思 ,把标准输出和标准错误都重定向到log文件。 最终结果:
1->log   2->log

4.cmd 2>log >&2

原来 1->屏幕。 2>log 表示 2指向log 也就是 2->log , >&2 表示 1指向2所在的地址,意思就是 1也指向了log(因为2所在的地址是log)。 最终结果:
2->log   1->log

总结

面试答案显然可以知道是 第2条命令与其余命令不同。 其余3条命令 2和 1都指向 log。这样理解的话,第一是将&暂时解释为取地址符,符合大多数人用c语言的角度来理解。第二 最终很清晰的描述整个过程。 不至于胡乱猜测。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GEEK JUMP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值