そのため、apt-getからの出力があり、他のどこにもリダイレクトできないようです。ここに私が見るもののサンプルがあります:
Sudo apt-get -qq -y --force-yes install cowsay 2>&1 > /tmp/tmp.txt
これは、16.04で実行しているサンプルコマンドです。 --force-yes
をここに含めて、将来の使用のために適切な警告をシミュレートします。今、私はこのコマンドがすべてを/tmp/tmp.txt
にリダイレクトすると期待しています。そして、ほとんどのコードがこれを行っています。ただし、実行すると次の結果が得られます。
$ Sudo apt-get -qq -y --force-yes remove cowsay 2>&1 > /tmp/tmp.txt
W: --force-yes is deprecated, use one of the options starting with --allow instead.
自分のファイルにもリダイレクトする警告を取得するにはどうすればよいですか?
ストリームリダイレクトコマンドが間違った場所にあります。リダイレクトは右から左に解析されるため、最初に> /tmp/tmp.txt
を記述し、次に2>&1
を記述する必要があります。あなたが書いたように、最初にSTDOUTをファイルにリダイレクトし、その後STDERRをSTDOUTにリダイレクトします。
これは正しいコマンドです:
Sudo apt-get -qq -y --force-yes remove cowsay > /tmp/tmp.txt 2>&1
しかし、もっと簡単な代替手段があります! STDERRをSTDOUTにリダイレクトして両方をファイルに書き込む必要は必ずしもありません。STDOUTとSTDERRの両方を直接ファイルにリダイレクトする演算子もあります:&>
Sudo apt-get -qq -y --force-yes remove cowsay &> /tmp/tmp.txt
説明と詳細情報:
> filename
はSTDOUT(ストリーム1)をfilename
にリダイレクトします2> filename
はSTDERR(ストリーム2)をfilename
にリダイレクトします&> filename
はSTDOUTとSTDERRをfilename
にリダイレクトします同様に、出力を2番目のコマンドにパイプする場合:
|
は、STDOUT(ストリーム1)を2番目のコマンドのSTDINにリダイレクトします2| filename
は、STDERR(ストリーム2)を2番目のコマンドのSTDINにリダイレクトします&| filename
は、STDOUTとSTDERRを2番目のコマンドのSTDINにリダイレクトします