![将标准输出连接到标准错误?](https://linux22.com/image/53874/%E5%B0%86%E6%A0%87%E5%87%86%E8%BE%93%E5%87%BA%E8%BF%9E%E6%8E%A5%E5%88%B0%E6%A0%87%E5%87%86%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我想将一个进程的标准输出发送到另一个进程的标准输入,同时也发送到控制台。例如,将 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