web-dev-qa-db-ja.com

<< EOFは何をしますか?

私はLinux管理者の初心者です。私はコードをデバッグするためにGDBを学習していますが、プログラムが読み取るinput.txtファイルを作成する必要があります。 >, >> and <などのリダイレクト記号は知っていますが、Googleが無視しているため、Googleで<<に関する情報を見つけることができませんでした。誰かが<<EOFが以下で何をするか説明できますか?ありがとう。

cat >input.txt <<EOF
15
LED Fantom

記事 からの抜粋:

ここにドキュメント

ヒアドキュメントは、対話型シェルスクリプトまたはプログラムに入力をリダイレクトするために使用されます。

対話型プログラムまたは対話型シェルスクリプトに必要な入力を提供することにより、ユーザーアクションなしでシェルスクリプト内で対話型プログラムを実行できます。

ヒアドキュメントの一般的な形式は次のとおりです-

command << delimiter document delimiterここで、シェルは<<演算子を、指定された区切り文字を含む行が見つかるまで入力を読み取る命令として解釈します。区切り文字を含む行までのすべての入力行は、コマンドの標準入力に送られます。

区切り文字は、ヒアドキュメントが完成したことをシェルに通知します。それがなければ、シェルは入力を永久に読み取り続けます。区切り文字は、スペースまたはタブを含まない単一のWordである必要があります。

以下は、行の総数をカウントするコマンドwc -lへの入力です-

$wc -l << EOF
    This is a simple lookup program 
    for good (and bad) restaurants
    in Cape Town.
EOF
3
$

ここのドキュメントを使用して、次のようにスクリプトを使用して複数の行を印刷できます-

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF 

これは次の結果を生成します-

これはケープタウンの良い(そして悪い)レストランのためのシンプルな検索プログラムです。次のスクリプトは、viテキストエディターでセッションを実行し、入力をファイルtest.txtに保存します。

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a Shell script
^[
ZZ
EndOfCommands

vimviとして機能させてこのスクリプトを実行すると、次のような出力が表示されます-

$ sh test.sh
Vim: Warning: Input is not from a terminal
$

スクリプトを実行すると、ファイルtest.txtに以下が追加されます。

$ cat test.txt
This file was created automatically from
a Shell script
$
16
user373230