Linux / bash管道和重定向

时间:2018-09-22 07:09:17

标签: linux bash shell unix

我从书“ 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

任何帮助将不胜感激

1 个答案:

答案 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>&1stderr重定向到stdout指向的内容,请注意顺序很重要。