我有一个来自《unix/linux 你的终极指南》一书中的问题
假设有一个名为“prog”的程序,它在 stderr 和 stdout 上都有输出。给出一个使用“o”选项运行“prog”的命令,并将字符串“arg”作为其唯一参数传递,它从程序“progBefore”的输出中获取其标准输入,其中“prog”的标准输出被忽略,“prog”的标准错误通过“progAfter”的标准输入赋予程序“progAfter”。不要使用任何临时文件。
这是我尝试过的:
prog -o 'arg' < `progBefore` 1>/dev/null 2> progAfter
如有任何帮助,我们将不胜感激,谢谢
最佳答案
这是在做什么?
prog -o 'arg' < progBefore 1>/dev/null 2> progAfter
它正在调用程序prog
,从文件progBefore
获取输入,将stdout
传递到/dev/null
(忽略它)并将stderr
传递到文件 progAfter。当您应该使用管道时,您正在使用文件重定向:
progBefore | prog -o 'arg' 2>&1 1>/dev/null | progAfter
|
指示的管道(更准确地说,匿名管道)从左侧程序中获取stdout
,并将其发送到右侧程序的stdin
。
2>&1
将 stderr
重定向到 stdout
指向的任何内容,请注意顺序很重要。
关于Linux/bash 管道和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454379/