あいまいな出力リダイレクト

あいまいな出力リダイレクト

stderrをstdoutにリダイレクトしてからinitスクリプトのファイルにリダイレクトしようとしていますが、stderrをstdoutにインポートすると「あいまいな出力リダイレクト」エラーが発生します。 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.2つの競合するリダイレクトを設定しようとすると、次のことが発生します。

> echo foo > a > b
Ambiguous output redirect.

Bashでファイル名の代わりに複数の要素を含む配列を使用すると、次のエラーが発生する可能性があります。

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

答えで述べたようにcshでstderrリダイレクトが機能しません、この>&演算子は(t)cshで動作し、stdoutとstderrをリダイレクトします。 2>&1これはstderrをstdoutと同じ場所にリダイレクトする標準的な方法ですが、(t)cshはそれをサポートしません。代わりに、> foo 2>&1 リダイレクトターゲットfoo、一般パラメータ、およびリダイレクトターゲットを2組み合わせてリダイレクトが1競合するため、エラーが発生します。

>&Bashとzshでも動作しますが、標準機能ではありません。

答え2

2番目の項目は正しく機能します。あってはならない空白があったり、逆に重要な空白が欠落した場合、「あいまいなリダイレクト」エラーが発生する場合があります。

次のようにコマンドを簡素化します。

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

">/tmp/x.txt"部分はstdout(ファイルハンドル#1)をリダイレクトします。 >とファイル名の間にはスペースがありますが(この場合は混乱する可能性があります)、ここにスペースを入れてはいけません。

2>&1 は、stderr (ファイル・ハンドル 2) をファイル・ハンドル 1 (つまり、stdout) の位置にリダイレクトします。ここでも空白はありません。

&はあなたの仕事のコンテキストを提供します。前の文字から1つのスペースだけオフセットする必要があります。

2つのリダイレクトを逆にするとうまくいきません(ここでは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は、コメントでこれが実際に有効な構文であることを指摘しました。

関連情報