4.14.2. リダイレクト - > , >> , 2> -


4.14.2. リダイレクト - > , >> , 2> -

【コマンド説明】リダイレクト
リダイレクトとは、プロセスがやり取りするデータをファイルに受け渡す事を指します。
【動画説明】
作成(>)
コマンドの結果をファイルとして書き出します。指定したファイルパスに同名のファイルがある場合は上書きされます。

$ echo "sample text" > a.txt
$ cat a.txt
sample text
$ echo "sample text" > a.txt
$ cat a.txt
sample text

追記(>>)
コマンドの結果をファイルとして書き出します。
指定したファイルパスに同名のファイルがある場合、その内容の下に書き足します。

$ echo "sample text" >> b.txt
$ cat b.txt
sample text
$ echo "sample text" >> b.txt
$ cat b.txt
sample text
sample text

  • 標準出力、標準エラー出力

シェルを実行した際にコンソールに出力されるデータは2種類あります。
実行結果や詳細を出力する標準出力と、エラー内容や、ヘルプ等を出力する標準エラー出力です。通常のリダイレクトでは標準出力を変更するだけで、標準エラー出力をファイルに保存する場合はコマンド [ストリーム番号]リダイレクト記号 送り先ストリーム番号は指定がない場合と1のときは標準出力、2のときは標準エラー出力を対象とします。送り先にはファイルの他に[&ストリーム番号]と書く事でその時点での指定したストリームの保存先を送り先に指定することができます。

例えば、下の例では標準出力をa.txtに書き込み、標準エラー出力も標準出力と同じa.txtに書き込む様になります。

$ ls >a.txt 2>&1

【動画説明】
lsコマンドの結果をa.txtとして作成し、catで確認します。その後echoコマンドで1文追記して、catで確認してみましょう。

$ ls >a.txt

$ cat a.txt

$ echo Hello! >>a.txt

$ cat a.txt

lsで間違ったオプションを指定してそのエラー出力をb.txtとして作成します。
catでb.txtと存在しないc.txtを閲覧しようとし、標準出力をd.txtへ、標準エラー出力を標準出力に向けるようにします。

$ ls -j 2>b.txt

$ cat b.txt c.txt >d.txt 2>&1

$ cat d.txt

【問題】
ある端末でコマンドと実行した結果が以下のとおりである時、c.txtとd.txtの内容を考えて下さい。

$ ls
a.txt b.txt
$ cat a.txt
keyword "c"
$ cat b.txt
keyword "d"
$ cat a.txt e.txt >d.txt 2>c.txt

資料をダウンロード