想来管道应该已经深入人心了,可是重定向这玩意就是不入我的心。
唉,像我这个被XWindow惯坏了的,只会重定向个文件啥的。今天好容易静下心来看了看这摊子事。您要是稍微懂一点,就直接移步lightspeed的经典重定向普及贴吧。下面码的都是玩尿泥的技术。。。
stdin0/stdout1/stderr2这三个文件描述符俺还是懂的。最简单的重定向莫过于这个经典例子了:
# ls >/ dev / null 2 >& 1
>/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 >&-
之前想了好久,能不能通过复制重定向实现同时双输出?即一个输出到文件,另一个输出到屏幕?反正我没想出来。后来还是用tee实现的。
tee - read from standard input and write to standard output and files
# echo gaga | tee log
gaga
# cat log
gaga
对我来说,这就够用了。高级技能?用的时候再说吧。