LinuxおよびUnixシェルには、catコマンドの一種のdo-whileループを開くことができる、ややあいまいな機能があります。これはヒアドキュメントと呼ばれます 、そしてそれはあなたが使用しているシェルに関係なく、多かれ少なかれテキストエディタを持つことを可能にします。構文は次のとおりです。
$ cat << EOF >> example.txt
真ん中の文字列は、基本的に、ループを停止する条件付きです。つまり、1行に単独で入力すると、ループは終了します。ループ中、端末に入力したものはすべて、宛先ファイル(この場合)にパイプされます。
インストール
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
ターミナルがあれば、ヒアドキュメントを開始することができます。この構文上のトリックをBash、tsch、Kornシェルで使用しました。
ヒアドキュメントの使用
ヒアドキュメントの「セッション」を開くには、最初に終了文字列を持つcatを指すリダイレクトを使用してcatコマンドを使用します(一般的な規則は EOF 「ファイルの終わり」の場合ですが、実際には何でもかまいません)。終了キーワードの後、出力を宛先ファイルにリダイレクトします。その後、最も一般的なシェルキーボードショートカットを使用して作業をナビゲートし、端末に直接入力できます。指定した終了文字列を1行に単独で入力すると、セッションは終了します。一意のプロンプト(通常は> )によってヒアドキュメントループにいることがわかります 文字)。
$ cat << EOF >> example.txt
> Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...
>
> whatever...
>
> you want to type.
>
> EOF
$
端末がEOFを待機している間に入力するすべてのもの 宛先ファイルに配置されます。プロンプト文字は省略され、EOF自体はファイルの一部ではありません。
Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...
whatever...
you want to type.
現実的には、優れたテキストエディタの代わりにヒアドキュメント構文を使用することはおそらくないでしょう。複数の行を入力するのは簡単なハックですが、10行を超えるとその有用性が損なわれ始めます。たとえば、シェルの履歴関数をトリガーせずに前の行を編集することはできません。シェルとその構成方法によっては、上に移動してから下に移動してテキストを呼び出し、 Ctrl + Bを使用してテキストに戻ることができる場合があります。 。
シェルのほとんどの機能は期待どおりに機能しますが、元に戻すことはなく、エラー回復もほとんどありません。
さらに、最小限のインストールでも、少なくともViまたはedがインストールされている可能性があります。
それでもヒアドキュメントはまだ役に立ちます! エコーよりも柔軟性があります 、そしてシェルスクリプトで作業しているときは、それが不可欠です。たとえば、一連のカスタムアプリケーションのインストールを自動化できるように、インストーラースクリプトを作成しているとします。アプリケーションの1つが.dekstop
で配布されていません ファイルなので、アプリケーションメニューには表示されません。これを修正するには、.desktop
を生成することにします。 インストール時にファイルします。
.desktop
を書くのではなく ファイルを作成し、インストールスクリプトの外部依存関係として持ち運ぶ場合は、インストールスクリプト自体でヒアドキュメントを使用できます。
#!/bin/sh
VERSION=${VERSION:-x.y.z}
PKGNAM=${VERSION:-example}
PKG="${PKGNAM}"-"${VERSION}"-`arch`.tgz
# download package
wget "${PKG}"
tar txvf "${PKG}"
# use here doc to create missing .desktop file
cat << EOF >> $HOME/.local/share/applications/example.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name="${PKGNAM}"
Comment="${PKGNAM}"
Exec="${PKGNAM}" %F
EOF
# insert the rest of an install script...
ファイルへのテキスト入力が自動化されており、テキストエディタは必要ありません(もちろん、スクリプトの作成に使用するものを除きます)。結果の.desktop
は次のとおりです。 ファイルは次のようになります:
[Desktop Entry]
Version=1.0
Type=Application
Name=example
Comment=example
Exec=example %F
ご覧のとおり、ヒアドキュメント内で変数を使用すると、正しく解決されます。 EOF
文字列はファイルに表示されません。ヒアドキュメントの終了を通知するだけです。
エコーよりも優れている
ヒアドキュメント手法は、一般的にecho
よりも簡単であると考えられています またはprintfを使用すると、ドキュメントに「入った」後は、好きなことを自由に行うことができます。その意味では解放的ですが、適切なテキストエディタと比較すると制限があります。
クイックノートとシェルスクリプトにはヒアドキュメントを使用し、構成ファイルを動的に再度生成する方法についてパズルを解くことはありません。