如何从脚本中将我的所有终端shell脚本的输出重定向/管道到另一个程序?

时间:2013-05-20 09:02:31

标签: bash

我有一个脚本,我想做相同的事情:

  

myscript | anotherprogram

但是来自脚本。我不想调用

  

mysubtask | anotherprogram

每次我必须在我的脚本中运行我的子任务,我只想启动过滤器以及我的所有OUT& ERR路由到它(脚本不是交互式的)。

所以最后我想做的是

  1. 设置OUT& ERR到另一个程序的输入。 anotherprogram只会为脚本的一个实例运行,以便我的所有输出都可以运行。
  2. 正常使用OUT&运行剩余的脚本。我随后的回声和子任务输出的ERR不断地转到另一个程序(我只想让另一个程序运行一次,这是在我的整个脚本中)

1 个答案:

答案 0 :(得分:4)

我可以通过两种简单的方式来实现这一目标。首先,您可以使用带括号的子shell:

(
  echo hello
  echo world
) 2>&1 | anotherprogram

或者您可以使用exec重定向脚本顶部的各种文件描述符

exec > >( anotherprogram ) # send stdout to anotherprogram
exec 2>&1                  # merge stderr into stdout

echo hello
echo world