【发布时间】:2010-10-14 19:43:26
【问题描述】:
这个问题已经困扰我一段时间了。是否可以将stdout 和stderr 重定向到终端输出和到程序?
我知道可以使用tee 将输出重定向到一个文件和stdout,但我希望它转到一个程序(我的编辑器 [TextMate])以及终端输出......当然这个是可能的(我知道 zsh 是可能的……)
【问题讨论】:
这个问题已经困扰我一段时间了。是否可以将stdout 和stderr 重定向到终端输出和到程序?
我知道可以使用tee 将输出重定向到一个文件和stdout,但我希望它转到一个程序(我的编辑器 [TextMate])以及终端输出......当然这个是可能的(我知道 zsh 是可能的……)
【问题讨论】:
您可以使用命名管道,这正是您所描述的情况。
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)
【讨论】:
|& 替换| 然后bash 重定向stdout/stderr。
是否可以将 stdout 和 stderr 重定向到终端输出和程序?
我不确定在编辑器的输入中组合 stdout 和 stderr 有多大用处,但这样的事情是否能满足您的需求?
input_prog 2>&1 | tee /dev/tty | my_editor
【讨论】:
/dev/stdout和/dev/stderr
我实际上不知道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
【讨论】: