关于在()中运行子shell命令的问题(与重定向输出相关)

leanas 发布于 2011/06/09 11:37
阅读 540
收藏 1
这样一条命令date >桌面/new,很容易理解,命令会把输出日期重定向打印到桌面的new文件上,但是我又输入了一个(date)  >桌面/new命令用来测试。我想的是,这个date会在子shell中运行,在子shell中date的输出并没有被重定向,所以date应该是在子shell的屏幕上打印日期,然后返回父shell,返回之后会碰到>桌面/new命令。不管在这之后会怎么样,我就输入这条命令想测试下。没想到它竟然跟不加括号运行一样。一样是把输出重定向到了new文件。有点想不通为什么。然后我又用了一条(date >桌面/son)  >桌面/new测试。结果发现输出被重定向到son,同时new的内容也被清空了。我再用date >桌面/son >桌面/new测试(就是去掉上一条命令的括号)。结果发现输出日期打印到了new  上,son文件的内容被清空了。我用的是bash.不知道哪位大侠能解释下。
加载中
0
panzhc
panzhc

1. (date)  >桌面/new

date执行完以后打印到标准输出,然后再重定向给了new

2. (date >桌面/son)  >桌面/new

date的输出直接重定向给了son,然后标准输出就是空的,所以再把空内容重定向给new

3. date >桌面/son >桌面/new

一般这样写没什么意义,结果可能就是谁先匹配的问题。一般像下面这样写:

重定向标准错误:

date > son 2>&1

重定向的同时打印到标准输出:

date  | tee son

返回顶部
顶部