我从书“ unix / linux您的终极指南”中提出一个问题
假设有一个名为“ prog”的程序在stderr和stdout上都输出。给出一个带有“ o”选项和传递字符串“ arg”作为唯一参数的命令来运行“ prog”,它从程序“ progBefore”的输出中获取其标准输入,其中“ prog”的stdout被忽略,然后通过“ progAfter”的stdin将“ prog”的stderr赋予程序“ progAfter”。不要使用任何临时文件。
这是我尝试过的:
prog -o 'arg' < `progBefore` 1>/dev/null 2> progAfter
任何帮助将不胜感激
答案 0 :(得分:1)
这是做什么的?
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
由|
表示的 A 管道(更正确地说,是匿名管道)从左侧程序中获取stdout
并将其发送移至右侧程序的stdin
。
2>&1
将stderr
重定向到stdout
指向的内容,请注意顺序很重要。