SHELL重定向那点破事

    想来管道应该已经深入人心了,可是重定向这玩意就是不入我的心。

    唉,像我这个被XWindow惯坏了的,只会重定向个文件啥的。今天好容易静下心来看了看这摊子事。您要是稍微懂一点,就直接移步lightspeed的经典重定向普及贴吧。下面码的都是玩尿泥的技术。。。

    stdin0/stdout1/stderr2这三个文件描述符俺还是懂的。最简单的重定向莫过于这个经典例子了:


     
# ls >/ dev / null 2 >& 1
    只要了解SHELL处理重定向时由左及右的方向就不难理解了。

     >/dev/null 等同于 1>/dev/null ,把标准输出重定向到无底洞扔掉。 2>&1是说把标准错误输出重定向到标准输出“指向的地方“。无论标准输出指向了哪里。所以该命令可以理解为:“标准输出内容扔到无底洞里。标准错误输出看考标准输出把内容扔到无底洞里了,自己也把内容扔到无底洞里“。

    与之对应的例子是:


     
# ls 2 >& 1 1 >/ dev / null
    按顺序走:标准错误输出扔到标准输出的靶子上,就是屏幕。标准输出自己改以下靶子,扔到无底洞里。

    我理解这些东西花了好长时间,关键就是没理解重定向符号 ">&"是个什么东西。其实可以认为是复制。我给自己想的例子就是“按照1的方向另扯一根水管,然后把原来那根水管拿走“。然后我就明白了下面这句代码的意思了:


     
# exec 3 >& 2
# ls FileNotExist
2 > errlog
# exec
2 >& 3
# exec
3 >&-
    无非就是“扯一根管子3备份。管子2挪作他用。管子2拿回原地。管子3撤掉“。他爷爷的,真绕。

    之前想了好久,能不能通过复制重定向实现同时双输出?即一个输出到文件,另一个输出到屏幕?反正我没想出来。后来还是用tee实现的。

tee - read from standard input and write to standard output and files
   

     
# echo gaga | tee log
gaga
# cat log
gaga

 

    对我来说,这就够用了。高级技能?用的时候再说吧。
posted on 2010-12-30 22:08  陈伟强 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/chenwq/archive/2010/12/30/1922530.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值