コマンドプロンプト - リダイレクト | Programming Place Plus

トップページWindows編

この章の概要 🔗

この章の概要です。


リダイレクト 🔗

リダイレクトとは、標準ストリームの具体的な出力先や入力元を変更する機能のことです。

標準ストリームは標準出力、標準入力、標準エラーといった標準的に利用できる入出力の経路のことです。C言語でいえば stdout、stdin、stderr、C++ ではいえば std::cout、std::cin、std::cerr といったもので取り扱うことができます。C言語の場合は、printf関数や puts関数、scanf関数といったものを使うことが多いですが、これらは標準出力や標準入力に対して入出力を行っています。

ほとんどの環境では、標準出力と標準エラーは画面(コマンドプロンプトなど)に表示するようになっており、標準入力はキーボードから入力を受け取るようになっていますが、この出力先や入力元を変更する機能がリダイレクトです。

コマンドプロンプトからコンソールアプリを実行するとき、たとえば「HelloWorld.exe」であれば、次のように実行しますが、

HelloWorld

ここに専用の構文で記述を追加することで、リダイレクトを行えます。

コンソールアプリを実行する方法については、「コンソールアプリを実行する」のページで説明しています。

標準出力 🔗

標準出力の出力先を変更するには、> に続けて、新しい出力先を指定します。よくあるのは、どこかファイルに出力するように変更することです。たとえば、test.txt へ出力させるようにするには、次のようにします。

HelloWorld > test.txt

HelloWorld.exe の実行の中で、標準出力へ出力したものはすべて test.txt へ書き出されるようになります。test.txt が存在しなければ自動的に作成されます。

test.txt がすでに存在しており、その中身があった場合、既存の内容は上書きされることに注意してください。上書きではなく、末尾に書き足すような動作を望むのならば、> の代わりに >> を用います。

HelloWorld >> test.txt

プログラムにコマンドライン引数を渡す場合、HelloWorld 15 24 > test.txt といったように、プログラム名に続いてコマンドライン引数を記述してから、リダイレクトの記述を続けます。

標準エラー 🔗

標準エラーの出力先を変更するには、2> に続けて、新しい出力先を指定します。

HelloWorld 2> error.txt

HelloWorld.exe の実行の中で、標準エラーへ出力したものはすべて error.txt へ書き出されるようになります。

標準出力の場合と同様、error.ext の内容は上書きされます。書き足したければ 2>> にします。

HelloWorld 2>> error.txt

2> の 2 の部分は標準エラーであることを表しています。ちなみに 1 にすると標準出力のことになり 1> のようにして標準出力のリダイレクトが可能ですが、前述のように > とするだけで同じ意味になります(0 は標準入力です)。

標準入力 🔗

標準入力の入力元を変更するには、< に続けて、新しい入力元を指定します。

HelloWorld < hello.txt

HelloWorld.exe の実行の中で、標準入力から入力を受け取っている箇所はすべて、hello.txt の内容からデータを受け取るようになります。

パイプ 🔗

標準出力へデータを書き出すプログラムと、標準入力からデータを受け取るプログラムがあるとき、前のプログラムが書き出したデータを直接受け取るように実行させることが可能です。

program1 | program2

このように | で区切って実行することにより、まず program1 が実行されます。実行を終えたあと、program2 の実行が開始されますが、program1 が標準出力へ書き出したデータを、program2 は標準入力から受け取ります。この機能はパイプと呼ばれます。

次のように実行したのとほぼ同等の意味になりますが、一時ファイルを作る(そして削除する)必要がなく、記述もシンプルになります。

program1 > temp.txt      <-- program1 を実行。標準出力への出力内容は temp.txt へ書き出す
program2 < temp.txt      <-- program2 を実行。標準入力からの入力は temp.txt の内容を読み取る
rm temp.txt              <-- データの受け渡しに使った一時ファイルを削除

パイプとリダイレクトを組み合わせることは可能です。次の例は、program1 は標準入力の入力を data.txt から受け取り、標準出力へ書き出した内容が program2 に引き渡され、program2 は標準エラーへの出力を error.txt へ書き出します。

program1 < data.txt | program2 2> error.txt

参考リンク 🔗



更新履歴 🔗



Windows編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る