将bash stdout / stderr重定向到两个地方?

时间:2009-03-22 10:05:18

标签: bash redirect

这个人一直在困扰我一段时间。是否可以将stdoutstderr重定向到终端输出到程序?

我理解可以将输出重定向到文件,并stdouttee重定向,但我希望它转到程序(我的编辑器[TextMate])以及终端输出......当然这是可能的(我知道它可能与zsh ...)

3 个答案:

答案 0 :(得分:31)

您可以使用命名管道,该管道专门用于您描述的情况。

mkfifo some_pipe
command_that_writes_to_stdout | tee some_pipe \
  & command_that_reads_from_stdin < some_pipe
rm some_pipe

或者,在Bash:

command_that_writes_to_stdout | tee >(command_that_reads_from_stdin)

答案 1 :(得分:20)

  

是否可以将stdout和stderr重定向到终端输出和程序?

我不确定将stdout和stderr组合在一个编辑器的输入上是多么有用,但这样的东西能做你需要的吗?

input_prog 2>&1 | tee /dev/tty | my_editor

答案 2 :(得分:2)

我实际上并不知道TextMate是否可以将文件作为标准输入进行编辑,这看起来有点奇怪。我怀疑你想将stdout / stderr发送到一个文件并在那里编辑,在这种情况下你需要:

progname 2>&1 | tee tempfile ; textmate tempfile

2>&1重定向stderr(文件句柄2)转到与stdout(文件句柄1)相同的位置,以便它们最终都在一个流中。然后tee命令将其写入tempfile以及stdout

然后,一旦完成该过程,就会在临时文件上调用编辑器。

如果它可以接受标准输入进行编辑,请使用:

progname 2>&1 | tee /dev/tty | textmate