SHELL重定向那点破事
时间:2010-12-30 来源:陈伟强
唉,像我这个被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无非就是“扯一根管子3备份。管子2挪作他用。管子2拿回原地。管子3撤掉“。他爷爷的,真绕。
# ls FileNotExist 2>errlog
# exec 2>&3
# exec 3>&-
之前想了好久,能不能通过复制重定向实现同时双输出?即一个输出到文件,另一个输出到屏幕?反正我没想出来。后来还是用tee实现的。
tee - read from standard input and write to standard output and files
# echo gaga | tee log
gaga
# cat log
gaga
对我来说,这就够用了。高级技能?用的时候再说吧。
相关阅读 更多 +