模糊输出重定向

jbe*_*lau 4 bash io-redirection stdout stderr

我正在尝试将 stderr 重定向到 stdout,然后再重定向到 init 脚本中的文件,但是当我将 stderr 引入 stdout 时,我收到了“Ambiguous output redirect”错误。单独的标准输出不会导致错误,并写入我所说的日志文件。我试过以下

-jar /jbeaulau_test/microservices/config-server-0.0.2-RELEASE.jar &>/jbeaulau_test/microservices/log/all.log &

-jar /jbeaulau_test/microservices/config-server-0.0.2-RELEASE.jar >/jbeaulau_test/microservices/log/all.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

任何意见,将不胜感激。

ilk*_*chu 5

如果您正在运行 (t)csh,Ambiguous output redirect.如果您尝试设置两个相互冲突的重定向,则会得到:

> echo foo > a > b
Ambiguous output redirect.
Run Code Online (Sandbox Code Playgroud)

在 Bash 中,如果使用具有多个元素的数组代替文件名,您可能会得到类似的错误:

$ set aa bb
$ echo foo > "$@"
bash: "$@": ambiguous redirect
Run Code Online (Sandbox Code Playgroud)

正如stderr 重定向在 csh 中不起作用的答案中提到的,>&操作员在 (t)csh 中工作以重定向 stdout 和 stderr。 2>&1是将 stderr 重定向到与 stdout 相同位置的标准方法,但 (t)csh 不支持。相反,它将组合> foo 2>&1 作为重定向到foo、常规参数2和重定向到1,并且重定向冲突,因此您会收到错误。

>& 也适用于 Bash 和 zsh,但不是标准功能。


Kev*_*ane -1

第二个条目应该可以正常工作。如果您在不应该存在的空格中存在空格,或者相反,当缺少重要空格时,有时会发生“不明确的重定向”错误。

我会简化你的命令来演示:

echo "Test" >/tmp/x.txt 2>&1 &
Run Code Online (Sandbox Code Playgroud)

">/tmp/x.txt" 部分将重定向 stdout(文件句柄 #1)。> 和文件名之间允许有空格(尽管在这种情况下会令人困惑),但否则此处不应有任何空格。

2>&1 会将 stderr(文件句柄 2)重定向到文件句柄 1 所在的位置(即 stdout)。这里也不能有任何空格。

& 将为您的任务提供背景。它必须与前一个字符偏移一个空格。

反转两个重定向不起作用(尽管 echo 在这里是一个糟糕的选择,因为它不会产生 stderr 输出):

echo "This will not work" 2>&1 >/tmp/x.txt &
Run Code Online (Sandbox Code Playgroud)

这意味着:

2>&1
Run Code Online (Sandbox Code Playgroud)

将文件句柄 2 重定向到文件句柄 1 所在的位置(此时仍然是控制台)

>/tmp/x.txt
Run Code Online (Sandbox Code Playgroud)

将文件句柄 1 重定向到文件 - 但由于此时文件句柄 2 (stderr)已经重定向,因此它将保留其目的地并仍然转到控制台。

您编写的第一个命令只是一个语法错误。

echo &>/tmp/x.txt
Run Code Online (Sandbox Code Playgroud)

更新:@Wildcard 在评论中指出这实际上是有效的语法。


归档时间:

查看次数:

22266 次

最近记录:

7 年,8 月 前