不明确的输出重定向

不明确的输出重定向

我试图将 stderr 重定向到 stdout,然后重定向到 init 脚本中的文件,但是当我将 stderr 引入到 stdout 时,出现“不明确的输出重定向”错误。仅标准输出不会导致错误,并会写入我所说的日志文件中。我尝试过以下方法

-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 &

任何意见,将不胜感激。

答案1

如果您正在运行 (t)csh,Ambiguous output redirect.如果您尝试设置两个冲突的重定向,则会出现以下情况:

> echo foo > a > b
Ambiguous output redirect.

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

$ set aa bb
$ echo foo > "$@"
bash: "$@": ambiguous redirect

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

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

答案2

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

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

echo "Test" >/tmp/x.txt 2>&1 &

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

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

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

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

echo "This will not work" 2>&1 >/tmp/x.txt &

这意味着:

2>&1

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

>/tmp/x.txt

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

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

echo &>/tmp/x.txt

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

相关内容