これは私のテスト.sh
ファイルです。
エラーと出力.sh
#!/bin/bash
echo myecho
ls dflj
私が走ると、./errorandoutput.sh >file 2>&1
私たちはこのようなものを得ることができますfile
STDOUT
しかし、情報が裏にあることを願っていますSTDERR
。だからコマンドを次に変更しました。
./errorandoutput.sh >file 1>&2
しかし、私は空のものを得ますfile
。情報がリダイレクトの背後にあるようにするにはどうすればよいですかSTDOUT
?STDERR
file
file
私の言葉は、私が良いことを受け取ることができたらいいのです。
ls: cannot access 'dflj': No such file or directory
myecho
答え1
これは、リダイレクト順序が機能する方法ではありません。
リダイレクト順序は、シェルがファイルの内容ではなくファイル記述に対して操作を実行する順序のみを決定します。
存在する:
./errorandoutput.sh >file 2>&1
まず、シェルは標準出力にリダイレクトfile
し、次に標準エラーをリダイレクトします。これは標準出力を指すfile
ので、標準出力と標準エラーの両方に移動しますfile
。
この段階で、シェルはリダイレクトを完了しました。ファイルの内容とは何の関係もありませんfile
。
コンテンツの順序は、file
スクリプト内で実行されるコマンドの順序によって決定されます。スクリプトを次のように変更します。
#!/bin/bash
ls dflj
echo myecho
あなたはあなたが望むものを得るでしょう。
答え2
これ>'は"1**>**"のように動作します。
これはうまくいきます
./errorandoutput.sh 2>file 1>&2
$ ( echo yay ; fhgfhgf ) > out 2>&1
$ cat out
yay
bash: fhgfhgf: command not found
$ ( echo yay ; fhgfhgf ) 2> out 1>&2
$ cat out
yay
bash: fhgfhgf: command not found
答え3
重要な場合は、標準出力をファイルに送信して出力します。もちろん、これにはスクリプトが必要です。
temp=/tmp/yc$$
yourcommand > ${temp}
cat ${temp} && rm -f ${temp}