目前,我正在编写一个小shell (重定向、管道、exec等)。一直在试图找出Linux shell在寻址I/O重定向时所采取的步骤。
关于我需要什么帮助的一些问题:
无论如何,我能想到的是(如果我错了就纠正我):
cmd > file1 # stdout of cmd goes to file
cmd file1 > file2 # stdout of cmd with file1 as an argument goes to file2
cmd file2 < file1 # stdin on file2 comes from file1现在,我不知道在以下情况下的过程(比如shell如何查找和处理这些情况)。我不知道贝壳的脚步
cmd file2 > file3 < file1 # using "tee" in place of "cmd" I don't know
# how to do the dups and when to exec
cmd file2 < file3 > file1 # same ^发布于 2013-11-26 11:17:52
只要您只重定向stdin和stdout,处理重定向的顺序就无关紧要,因此最后两个示例完全相同。
BASH处理IO从左向右重定向。
> cmd1 > file 2>&1
> cmd2 2>&1 > file这两个不一样。在第一种情况下,我将stdout绑定到file,然后将stderr绑定到stdout: stderr和stdout现在都进入文件。
在第二种情况下,我将(子的) stderr绑定到(父级的) stdout,然后找到要归档的子级的stdout。其结果是,您现在可以在stdout上获得子级的stderr输出,并且stdout会转到文件中。例如,这对于处理管道中的stderr很有用。
如果查看BASH的源代码,可以看到命令的执行分几个步骤进行:
https://stackoverflow.com/questions/20215401
复制相似问题