gpt4 book ai didi

shell - 伯恩 shell : Force STDOUT to STDERR

转载 作者:行者123 更新时间:2023-12-01 10:06:05 25 4
gpt4 key购买 nike

我正在创建一个 Subversion post-commit hook .我需要将一个命令的输出强制为 STDERR,以便提交后 Hook 将消息编码回客户端。

如何将 STDOUT 强制转换为 STDERR?

在这个简化的示例中,文件 foo 存在,但 bar 不存在。

# touch foo
# ls foo bar
ls: bar: No such file or directory
foo

我想将 STDOUT 发送到 STDERR。我以为我可以用 >&2 做到这一点,但它似乎不起作用。

我期待以下示例将 STDOUT 重定向到 STDERR,并且 /tmp/test 将包含命令的输出和错误。但相反,STDOUT 似乎从未重定向到 STDERR,因此 /tmp/test 仅包含来自命令的错误。

# ls foo bar >&2 2>/tmp/test
foo
# cat /tmp/test
ls: bar: No such file or directory

我错过了什么?

我已经在 CentOS、Ubuntu、FreeBSD 和 MacOSX 上尝试过上面的例子。

最佳答案

shell 重定向一次评估一个,从左到右。所以当你有:

# ls foo bar >&2 2>/tmp/test

首先将 stdout 重定向到 stderr(不管它最初是什么——可能是终端),然后将 stderr 重定向到/tmp/test。因此,stdout 将指向 stderr 最初指向的任何内容,而不是指向文件。你要

# ls foo bar 2>/tmp/test >&2

首先将 stderr 重定向到文件,然后将 stdout 重定向到同一个地方。

关于shell - 伯恩 shell : Force STDOUT to STDERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10490289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com