プログラムによっては、標準入力を受けて処理をする場合があります。
例だと
str=str(input())
print(str)
そうしたとき、コマンドでプログラムを実行して、標準入力を打つことになります。
$ python sample.py
Hello World #標準入力
Hello World #標準出力
$
標準入力は、一般にキーボードが使われます。
しかし、シェルスクリプトでは、コマンドの後にヒアドキュメントを記述することで、そのシェルスクリプトを実行するだけで、標準入力してくれます。
標準入力を事前に準備することができるのです。
ヒアドキュメントとは
複雑(長い、改行、引用符、etc)の文字列をソースコード中に記述する方法。
メリットとして、ソースコードが分かりやすくなるのと、今回のようなシェルスクリプトに別のスクリプトを入れて実行するときに便利です。
ヒアドキュメントを用いる
#!/bin/bash
python sample.py <<EOF
Hello World
EOF
EOF<<からEOFの内容がプログラムに標準入力されます。
コマンドに<<EOFが渡されると次の行からEOFが単独で現れるまでの間、標準入力(ヒアドキュメント)になります。
<<は、リダイレクトで、コマンドへの入力元や入力先をコントロールすることができます。
EOFは、任意の文字列であるため、EOFである必要はありません。
EOFは、End Of Fileの略で、終端を表す文字列としてよく利用されます。
上記のプログラムを実行すると…
$ bash sample.sh
Hello World #標準出力
$
catコマンドでファイル作成
catコマンドのあと、ヒアドキュメントをすることで、EOF<<からEOFの内容のファイルを作成できます。
$ cat sample.txt <<EOF
Hello World
EOF
$ less sample.txt
Hello World
まとめ
ヒアドキュメントは、このようにコマンドのあとにリダイレクト記号<<、文字列(EOF)、文字列、文字列(EOF)で記述する方法を紹介しました。
この記法は、ターミナル上およびシェルスクリプトで用いる方法です。
他にも、Python、PHP、Rubyでもヒアドキュメントの機能があります。
それらは、また記法が異なるので、後日、まとめようと思います。