はいどうも、タイトルは語呂合わせ以外は完璧だと思ってますはい。標準入出力はシェルスクリプトにとってとても大事なものですが、ここではシェルスクリプトの記法については触れません(タイトル詐欺)
#標準入出力とは
みなさん聞き覚えがありますでしょうこの標準入出力という単語。Linuxでは何かコマンドが実行されると自動的に入出力のための3つのチャンネルがひらかれます。
それが下の3つのものです。
- 標準入力(stdin)
- 標準出力(stdout)
-
標準エラー出力(stderr)
それぞれが名前通りの入出力に対応しています。基本的には、標準入力にキーボード。標準出力と標準エラー出力にディスプレイがなっていると思います。
#リダレクトしよう
さっきの標準入出力先を変更する機能のことをリダイレクトといいます。標準出力先をファイルにリダイレクトしたりは、よくするんじゃないかなぁと思います。
##標準入力のリダイレクト
例えばcat
コマンドを引数なしで実行した場合、コマンドラインはキーボードからの入力待ち状態になります。そこで、引数なしのcat
コマンドに適当なファイルを入力リダイレクトしてあげると、次のようになります。ちなみに入力リダイレクトには**<**という記号を使います。
qiita:~/qiita$ vim ore.txt
qiita:~/qiita$ cat < ./ore.txt
私は天才だ。誰にそう言われたわけでも、結果が証明したわけでもないが、私にはわかる。なぜなら私は私だからだ(意味不明)
qiita:~/qiita$
こんな感じです。cat
コマンドの場合は引数にファイルを指定しても同じ結果になります。
##標準出力のリダイレクト
今回も簡単楽ちんcat
コマンドを使って出力リダイレクトの例を示していきます。
qiita:~/qiita$ cat ./ore.txt > watashi.txt
qiita:~/qiita$ cat ./watashi.txt
私は天才だ。誰にそう言われたわけでも、結果が証明したわけでもないが、私にはわかる。なぜなら私は私だからだ(意味不明)
qiita@pumpkin:~/qiita$
先程のore.txt
をcat
の引数にして、出力リダイレクトでwatashi.txt
を指定しています。確認してみると、しっかりore.txt
の内容がwatashi.txt
に出力されています。
ちなみに出力リダイレクト先のファイルは、存在していれば上書き、存在しなくても自動生成されます。>>
←のようにリダイレクト記号を重ねて2つ使うことで末尾に追記に変更できます。
##エラー標準出力
最後の最後、標準エラー出力は標準出力とは別のチャンネルなので、標準出力先をファイルに変更していても、エラー出力はディスプレイに表示されてしまします。
qiita@pumpkin:~/qiita$ cat < nainai.txt > watashi.txt
bash: nainai.txt: そのようなファイルやディレクトリはありません
qiita@pumpkin:~/qiita$
ここで、標準エラー出力には2>
という記号を使います。
qiita@pumpkin:~/qiita$ cat ./nainai.txt 2> error.txt
qiita@pumpkin:~/qiita$ cat ./error.txt
cat: ./nainai.txt: そのようなファイルやディレクトリはありません
qiita@pumpkin:~/qiita$
こんな感じです。確かにerror.txtにエラー内容がリダイレクトされていますね。
#あとがき
標準入出力についてはまだまだ内容があるのですが、この記事の更新に期待。きっとやるさ。