tee 标准输出到标准错误?

Rog*_*mbe 21 io-redirection tee stdout stdin

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

例如,我的git edit别名如下:

git status --short | cut -b4- | xargs gvim --remote
Run Code Online (Sandbox Code Playgroud)

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

那么,是否有类似tee的实用程序可以做到这一点?这样我就可以执行以下操作:

git status --short | \
    cut -b4- | almost-but-not-quite-entirely-unlike-tee | \
    xargs gvim --remote
Run Code Online (Sandbox Code Playgroud)

Vin*_*ert 17

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

git status --short | cut -b4- | tee /dev/tty | xargs gvim --remote
Run Code Online (Sandbox Code Playgroud)

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

  • 你是对的,我不知道我是怎么错过的。我在自己的 shell 中使用 tty 和 stdout 做了一些测试,但不知何故我错过了。感谢您的澄清,我删除了错误的陈述。 (2认同)

Hau*_*ing 8

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

start cmd:> echo foo | tee /dev/stderr 
foo
foo
Run Code Online (Sandbox Code Playgroud)