有关重定向的疑问

sh/bash/dash/ksh/zsh等Shell脚本
回复
Xiao--Y
帖子: 1
注册时间: 2009-05-06 16:22

有关重定向的疑问

#1

帖子 Xiao--Y » 2009-05-20 22:53

大家都知道重定向的顺序很重要,比如以下两个命令:
1) cat 0< shift 1>1.out 2>2.out
2)cat 2>2.out 0<shift 1>1.out
在此,当前目录下是没有shift这个文件或目录,但是两个命令的运行结果是不一样的。
1)的运行结果是,错误信息仍然是输出到屏幕上,书上的解释是说在shell发现shift不存在时,此时的标准错误还没有从定向到2.out。
2)的运行结果是,错误的信息写到了2.out上,书上的解释是说在shell发现shift不存在时,标准错误输出已经从定向到2.out。
这个解释似乎是正确的。
但是当执行3)cat shift 1>1.out 2>2.out时为什么会把错误输出到2.out呢???个人觉得,当shell执行到shift时,此时也已经
发现shift不存在啊,并且此时的标准错误输出也同样没有重定向到2.out呀,那它为什么会输出到2.out呢??
本人还有一个问题,像以上这些命令,它是一条命令,在执行的时候很显然是一步一步执行的,那shell是否要先编译再执行呢?还是逐步的解释这些命令呢?个人理解是逐步解释这些命令,因为只有逐步解释这些命令才会有1)和2)执行上的差别,但是这同样与3)的执行结果相矛盾。
如果是逐步解释的话,那么解释到cat shift时,内核会在当前目录下查找shift,此时就会有错误啊,那后面的从定向根本不会执行阿。
请各位大虾帮忙!!!!!先谢了!!!!
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: 有关重定向的疑问

#2

帖子 BigSnake.NET » 2009-05-20 22:56

cat shift 1>1.out 2>2.out 时
发现 shift 不存在的是 cat, shell 只管传参数
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
回复