将标准输出连接到标准错误?

将标准输出连接到标准错误?

我想将一个进程的标准输出发送到另一个进程的标准输入,同时也发送到控制台。例如,将 stdout 发送到 stdout+stderr。

例如,我有git edit以下别名:

git status --short | cut -b4- | xargs gvim --remote

我希望将文件名列表发送到屏幕以及xargs.

那么,有没有tee类似的实用程序可以做到这一点?这样我就可以做类似的事情:

git status --short | \
    cut -b4- | almost-but-not-quite-entirely-unlike-tee | \
    xargs gvim --remote

答案1

tee可以通过使用复制到当前控制台tee /dev/tty

git status --short | cut -b4- | tee /dev/tty | xargs gvim --remote

或者,您可以使用/dev/stdout/dev/stderr,但如果您的命令位于脚本内,它们可能会被重定向。请注意,它/dev/tty始终是控制台(并且可能不存在于非交互式 shell 中)。这是错误的,请阅读评论。

答案2

比以下更通用的解决方案/dev/tty

start cmd:> echo foo | tee /dev/stderr 
foo
foo

答案3

您可以使用球座命令,只需向其提供 STDERR 文件,例如:

tee /dev/stderr
tee /proc/self/fd/2

所以在这种情况下你的别名可能是:

git status --short | \
    cut -b4- | tee /dev/stderr | \
    xargs gvim --remote

相关内容