標準出力と標準エラー (stderr) へコマンドプロンプトでリダイレクト、パイプの使い方をまとめてみました。
標準出力と標準エラー出力を同時に(または別ファイルに)リダイレクトする方法も調べてみました。
目次
標準ストリーム(Standard Streams)
標準ストリームとは、UnixやWindowsのコマンドプロンプトにおいて、プログラムとその実行環境において事前に接続された入出力用のチャネルのことです。
- 標準入力 stdin
- 標準出力 stdout
- 標準エラー出力 stderr
の3種類あります。
プログラムやコマンドのエラーは標準出力ではなくて、標準エラー出力に出力されます。
標準ストリームのことをファイルディスクリプタとかファイル記述子とも呼ぶこともありますが、厳密には標準ストリームとファイルディスクリプタは別の概念です。
標準入力のファイルディスクリプタは0、
標準出力のファイルディスクリプタは1、
標準エラー出力のファイルディスクリプタは2
です。
標準ストリームを書き出し取り込みにはリダイレクトを使う (redirect)
リダイレクトに使う記号は
>
と
>>
と
<
です。
標準入力を取り込むには < を使います。
1 |
コマンド < ファイル名 |
標準出力を書きだすには > を使います。
1 |
コマンド > ファイル名 |
標準出力でファイルに上書きせず追加で書き出すには >> を使います。
1 |
コマンド >> ファイル名 |
標準エラー出力を書きだすには 2> を使います。2 はファイルディスクリプタの番号です。
1 |
コマンド 2> ファイル名 |
標準出力をファイル名Aと標準エラー出力をファイル名Bのように別ファイルにリダイレクトするには以下のようにします。
2 はファイルディスクリプタの番号です。
1 |
コマンド > ファイル名A 2> ファイル名B |
標準出力と標準エラー出力を同じファイルにリダイレクトするには以下のようにします。
1や2はファイルディスクリプタの番号です。
2>&1
でファイルディスクリプタ2の出力先をファイルディスクリプタ1の出力先と同じにするという意味になります。
1 |
コマンド > ファイル名 2>&1 |
実行例は次の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
c:\tmp>dir ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は CE01-5CF1 です c:\tmp のディレクトリ 2014/09/29 19:49 <DIR> . 2014/09/29 19:49 <DIR> .. 0 個のファイル 0 バイト 2 個のディレクトリ 227,077,517,312 バイトの空き領域 c:\tmp>dir aaa.txt > bbb.txt 2> ccc.txt c:\tmp>type bbb.txt ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は CE01-5CF1 です c:\tmp のディレクトリ c:\tmp>type ccc.txt ファイルが見つかりません c:\tmp> |
空のフォルダでdir aaa.txtと実行した結果、標準出力をbbb.txtに、標準エラー出力をccc.txtに書き出します。
dir aaa.txt
というコマンドは標準出力と標準エラー出力に結果を書き出すとも言うことができます。
ccc.txtの中身は「ファイルが見つかりません」と書き込まれています。
この方法はエラーが大量に発生した時などによく使います。
UnixでもWindowsのコマンドプロンプトでも同様に使うことが可能です。
パイプ (pipe)
パイプはあるコマンドの結果を別のコマンドに橋渡ししてくれます。
パイプに使う記号は
|
です。
1 |
コマンドA | コマンドB |
実行例は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
c:\tmp>type aaa.txt | more aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa aaa |
リダイレクトとパイプのまとめ
Unix、Windowsコマンドプロンプトともに、概念は同じで、似たような書式で使うことができます。
何かをコンパイルして、エラーがダダって出たときなどリダイレクトとパイプをつなぎ合わせて使うととても便利です。
UNIXのシェルについてのおすすめの本
↓UNIXのシェル、標準入出力についてのおすすめの本はコチラ
コメント
[…] 標準出力と標準エラー出力 (stderr) へコマンドプロンプトにてリダイレクト… […]