<< EOFとは何ですか?


6

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

cat >input.txt <<EOF

Stack Exchangeの投稿を参照してください。 シェルの制御演算子とリダイレクト演算子は何ですか?
G-Man

回答:


6

からの抜粋 記事

こちらの文書

here文書は、対話型シェルスクリプトまたはプログラムに入力をリダイレクトするために使用されます。

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

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

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

区切り文字は、here文書が完了したことをシェルに伝えます。それがなければ、シェルは入力を永遠に読み続けます。区切り文字は、スペースやタブを含まない単一の単語である必要があります。

以下はコマンドへの入力です 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

このスクリプトを次のように実行したとします。 vim 機能します viその後、あなたはおそらく次のような出力が表示されます -

$ 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
$
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.