【问题标题】:Writing to stderr using /dev/tty?使用 /dev/tty 写入标准错误?
【发布时间】:2014-01-23 05:50:13
【问题描述】:

我只想使用 /dev/tty 写入标准错误。如果我直接写到 /dev/tty(带有 tee),它似乎会在标准输出上打印出来。那是对的吗?如何指定要打印到 stderr?

目前 bash 中的行看起来像

echo "foo" >&2 | tee /dev/tty | logger -it "my_script"

【问题讨论】:

  • 您有一个在 stdout 和 stderr 上产生输出的命令,并且您想记录 stderr 并将其显示在屏幕上?
  • 也许你真正想要的是echo "foo" | tee /dev/stderr | logger -it "my_script"
  • 您可能会发现这个答案很有帮助:stackoverflow.com/a/692407/1608708
  • @anishsane 没有看到你的评论,如果你想发布它作为答案,我会删除我的

标签: bash stdout stderr tty


【解决方案1】:

如果我们将您的命令与 # 之后的每个命令的结果分开

echo "foo" >&2 # echo "foo" and redirect to fd 2 (/dev/sdterr)
| #pipe stdout to  
tee /dev/tty #both send stdout to file /dev/tty, which is terminal file that can output both stdout and stderr depending on what you pass to it (so you probably want /dev/stdout/ or /dev/stderr directly instead) and pass it along to the next pipe
| #pipe stdout to
logger -it "my_script"

所以这取决于你想做什么(在上面的 foo 被重定向到 stderr 并且没有任何东西被传送到 tee)

如果您想将 foo 打印到 stderr 并将 stdout 传递给您的脚本,您可以这样做

echo "foo" | tee /dev/stderr | yourscirpt

然后tee 将打印到标准错误,而 foo 将作为标准输出通过管道传输到您的脚本。

【讨论】:

  • 你完全理解了我的意图 - 打印到当前的标准错误,然后在其他地方管道。
猜你喜欢
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 2017-06-10
  • 2014-08-27
  • 2011-05-01
相关资源
最近更新 更多