这个shell命令会做什么?
./myprogram > /dev/null < myfile.c
一般来说,这与使用&lt;的其他顺序有什么不同?和&gt;?什么时候可以使用?
我问,因为我只能找到另一个订单(./myprog < myinputs.txt > myoutputs.txt
的示例,它直接接受myinputs.txt
的内容,并将运行./myprog
的结果写入{{1} }}),我能找到的与此类似的唯一示例类似于myoutputs.txt
,但只是在./myprogram > myoutputs.txt << EOF
将输出写入myoutputs.txt
之后将EOF附加到./myprogram
。
答案 0 :(得分:3)
本声明:
./myprogram >/dev/null <myfile.c
与:
相同./myprogram <myfile.c >/dev/null
在这种情况下,重要的不是重定向的顺序。
当重定向的目标本身被重新定义时,重定向的顺序很重要。例如,考虑:
cmd >/dev/null 2>&1
在上面,stdout和stderr都转到/dev/null
。现在,考虑一下:
cmd 2>&1 >/dev/null
在这种情况下,相比之下,stderr首先被重定向到stdout,在重定向时并且假设没有先前的重定向,stdr是与终端关联的文件句柄。其次,stdout被重定向到/dev/null
。这对stderr没有影响,因为它的输出继续到达终端。
换句话说,2>&1
不会将stderr分配给stdout。相反,它将stderr分配给当前与stdout关联的文件句柄。随后将stdout重定向到另一个文件句柄没有任何区别。这就是为什么订单在这里很重要。