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 &
任意のアドバイスをいただければ幸いです。
(t)cshを実行している場合、2つの競合するリダイレクトを設定しようとすると、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)にリダイレクトします。ここにもスペースがあってはいけません。
&はタスクの背景を表示します。これは、先行する文字からのスペースでオフセットする必要があります。
2つのリダイレクトを元に戻すことはできません(ただし、エコーは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は、これが実際に有効な構文であることをコメントで指摘しました。