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は、コメントでこれが実際に有効な構文であることを指摘しました。