linux shell中关于输入重定向的问题

各位好!
我们知道,在linux shell中可以用管道符(cmd1 | cmd2)将cmd1的标准输出作为cmd2的标准输入,也可以用cmd < filename 将filename的内容读入到标准输入当中。
我现在有个这么个需求:
result = cmd3(cmd1,cmd2)也就是说cmd1和cmd2执行后的两个输出,再通过cmd3命令整合起来。这种需求如何通过不产生中间的临时文件,在shell中通过单行命令来实现吗?(不要复杂的shell脚本)。

重定向就是这样的,命令的结果只能输出到一个地方,了解原理就可以理解了。
在 IO Redirection 中,stdout 或 stderr 的管道总是会先准备好,然后才将命令执行结果给导入。
你给的例子中,先重定向到/111.txt,再重定向到/222.txt,因此管道最终是接入了/222.txt。stdout只有一根管道,输入端是固定的,你只是在不停地移动输出端,当然是以最后的为准啦。

建议你去看看《Shell十三问》,里面有关于 IO Redirection 的详细解释。

解决方法就是用 tee 命令:
ls -l | tee /111.txt > /222.txt追问

你好!我没有举111和222.txt的例子,您是不是看错了。
我说的这个问题是result = cmd3(cmd1,cmd2),是cmd3要对cmd1和cmd2的执行结果继续做操作,是一个关于输入重定向的问题,不是输出。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-30
可以,echo `ls`|xargs ls|awk '{print $0}'

echo `ls`命令1的输出
xargs ls 命令2的输出
awk '{print $0}' 命令3 AWK整合上面2个命令输出的格式追问

你好!你这个好像也不是我说的意思。xargs 只是将前面的结果输入到后面,让ls去执行。我的需求是result=cmd3(result1(cmd1),result2(cmd2)),cmd1和cmd2分别执行后的结果都给cmd3来操作的,cmd3操作之后得出最终结果。

相似回答