どのようにLinux上のBashの「ヒアドキュメント」を使用する

Mar 31, 2025
Linux
Fatmawati Achmad Zaenuri / Shutterstock

奇妙な名前の「ここに文書」という名前のLinux上のBashスクリプト内の入力/アウトリダイレクトを使用できます。リモートコンピュータ上で実行する必要があるコマンドを自動化するのに最適な方法です。

ここで文書

Linuxの多くのコマンドには2つまたは3文字の名前があります。これは、LinuxがArcaneコマンドを学習していっぱいにするのが難しいという概念を生じさせるものです。しかし、Linuxの最も奇妙な名前の1つは短い短いものの1つではありません。 「ここでの書類」は書類ではなく、「ここ」のどちらを指すのか明確ではありません。

それらは比較的不明瞭な構成要素ですが、それらは役に立ちます。もちろん、これはLinuxであるので、猫を肌に肌を皮膚に皮膚にする方法があります。ここで提供される機能のいくつかは他の方法で複製することができる。それらの代替方法は通常より複雑である。プログラミングとスクリプティングでは、「より複雑な」も「バグへのよりもちろんよりもちろん」、そしてあなたのコードが維持するのが難しいということも意味します。

ここで文書が本当にExcelが、スクリプト内から確立された接続からリモートコンピュータに送信したいコマンドの自動化にあります。接続を簡単にすることは簡単ですが、接続が行われた後は、スクリプトからコマンドをリモートコンピュータ上のシェルに "ポンプ"?ここではあなたがそれほど簡単にそれをすることを可能にしましょう。

ここでの文書の基本原則

ここでの文書の慣用表現は次のようになります。

コマンド< limit_string
 。
 。
文章
データ
変数
。
。
limit_string 
  • 指図 :これはリダイレクトされた入力を受け入れる任意のLinuxコマンドです。注意、 エコー 指図 リダイレクトされた入力を受け入れません 。画面に書き込む必要がある場合は、を使用できます。 指図、 どちらの道
  • << :リダイレクトオペレータ。
  • limit_string :これはラベルです。コマンドにリダイレクトしているデータのリストに表示されていない限り、あなたが好きな限りです。テキスト、データ、および変数リストの最後をマークするために使用されます。
  • データリスト :コマンドに入力するデータのリスト。コマンド、テキスト、および変数を含めることができます。データリストの内容は、_LIMIT_STRINGが発生するまで一度に1行のコマンドに入力されます。

あなたはおそらく "eof"を制限文字列として使用する文書の例を見るでしょう。そのアプローチを好みません。それは動作しますが、 "EOF"は「ファイルの終わり」を意味します。ホーム文書がスクリプトファイル内の最後のものであるまれな場合とは別に、「EOF」が誤って使用されています。

あなたがしているものを指す制限文字列を使用するならば、それはあなたのスクリプトをはるかに読みやすくするでしょう。リモートコンピュータに一連のコマンドを送信している場合 安全なシェル (ssh)、 "_Remote_Commands"のようなものと呼ばれる制限文字列は完璧な意味があります。あなたはアンダースコアでそれらを始める必要はありません」 _ " キャラクター。それはあなたのスクリプトの普通のものとして何かとしてマークされるので私たちはそれをします。

簡単な例

ここではコマンドラインとスクリプトで文書を使用できます。ターミナルウィンドウに次のように入力すると、A "が表示されます。 > 「入力を入力するたびに行継続プロンプト」 "_end_of_text"制限文字列を入力して "Enter"を押すと、Webサイトのリストが渡されます。 猫、 そしてそれらはターミナルウィンドウに表示されます。

猫< _end_of_text.
どうやってオタク
オタクを見直す
ライフセーブ
CloudSavy IT
マインドボウル
_end_of_text 

それはエクササイズの最も価値がありませんが、データのリスト全体が照合され、制限文字列が見つかるまでコマンドに何も送信されないことを証明します。 NS リミット文字列 "_end_of_text"を入力して "Enter"キーを押すまでコマンドは入力されません。

スクリプトで同じことをすることができます。この例をエディタに入力するかコピーし、ファイルを「heredoc-1.sh」として保存してエディタを閉じます。

#!/ bin / bash.

猫<< "_end_of_text"
あなたのユーザー名は:$(whoami)
現在の作業ディレクトリは、$ PWDです
あなたのbash版は:$ bash_version.
_end_of_text 

この記事に従うと、スクリプトを作成するたびに、必要になる必要があります。 実行可能なものにします 走る前に。いずれの場合にも、 使用 chmod. 指図 。ここで使用されているスクリプト名の各例でスクリプトの名前を置き換えます。

 CHMOD + X Heredoc-1.SH 

このスクリプトには2つの環境変数が含まれています。 $ PWD $ bash_version. 。環境変数名は、スクリプトが実行されると、現在の作業ディレクトリとBashのバージョンのデータ値に置き換えられます。

スクリプトも使っています コマンド置換 オン NS 私は誰 指図 。コマンドの名前はそれ自身の出力に置き換えられます。スクリプト全体からの出力はcatコマンドによってターミナルウィンドウに書き込まれます。名前でそれを呼び出してスクリプトを実行します。

 ./ HEREDOC-1.SH 

スクリプトを変更して、ここにある文書の最初の行にLIMIT文字列を引用符で囲む場合 " 「データリストは、ここでDocumentコマンドverbatimに渡されます。変数値の代わりに変数名が表示され、コマンド置換は行われません。

#!/ bin / bash.

猫<<  -  "_end_of_text"
あなたのユーザー名は:$(whoami)
現在の作業ディレクトリは、$ PWDです
あなたのbash版は:$ bash_version.
_end_of_text 

タブの文字を処理します

デフォルトでは、データリスト内のタブ文字は保持されて端末ウィンドウに書き込まれます。この例を「HEREDOC-2.SH」としてコピーして保存してください。それを使用して実行可能なものにします chmod. 指図。インデントされた行を編集して、一連のスペースではなく、行の開始時に1つまたは2つのタブ文字があることを確認します。

#!/ bin / bash.

猫<< _end_of_text.
あなたのユーザー名は:$(whoami)
  現在の作業ディレクトリは、$ PWDです
    あなたのbash版は:$ bash_version.
_end_of_text 
[31 ]/HEREDOC-2.SH

タブはターミナルウィンドウに書き込まれます。

ダッシュを追加することによって - 「リダイレクト演算子には、ここでの文書は主要なタブ文字を無視します。この例を「heredoc-3.sh」として保存し、実行可能ファイルを作成します。

#!/ bin / bash.

猫<<  -  _end_of_text.
あなたのユーザー名は:$(whoami)
  現在の作業ディレクトリは、$ PWDです
    あなたのbash版は:$ bash_version.
_end_of_text 
 / HEREDOC-3.SH 

タブは無視されます。これは些細なように思えるかもしれませんが、スクリプトのインデントセクションのために先行タブに対処するためのきちんとした方法です。

ループや他の論理構造は通常インデントされています。ここでのドキュメントがスクリプトのインデントセクションに含まれている場合は、ダッシュを使用して - リダイレクト演算子を使用すると、先頭のタブ文字によって引き起こされるフォーマットの問題が削除されます。

#!/ bin / bash.

真であれば;それから
  猫<<<  -  _limit_string.
  1行目の先頭タブ付き。
  1行目のタブ付きの2行目。
  リーディングタブ付き3行目。
  _limit_string
Fi 

ファイルにリダイレクトします

ここで使用されているコマンドからの出力はファイルにリダイレクトできます。使用 " > "(ファイルを作成する)または" >> ((ファイルを存在しない場合は作成し、ファイルに追加するとファイルに追加)リダイレクト演算子 ここの文書の最初の行の制限文字列。

このスクリプトは "heredoc-4.sh"です。出力を "session.txt"というテキストファイルにリダイレクトされます。

#!/ bin / bash.

猫<< _end_of_text> session.txt.
あなたのユーザー名は:$(whoami)
現在の作業ディレクトリは、$ PWDです
あなたのbash版は:$ bash_version.
_end_of_text 
 ./ HEREDOC-4.SH 
 CAT SESSION.TEXT 

出力を別のコマンドに配管する

ここでの文書で使用されているコマンドからの出力は、他のコマンドへの入力としてパイプされます。使用する パイプ」 | .. "オペレーター ここの文書の最初の行の制限文字列。ここで出力をここからパイプします。 、 の中へ sed 。したい すべての出現を置き換えます 文字「e」の文字「a」の。

このスクリプトを "HEREDOC-5.sh"という名前を付けます。

#!/ bin / bash.

猫<< _end_of_text | SED 'S / A / E / G'
どのように
に
ga ga
_end_of_text 
[31 ]/HEREDOC-5.SH

「GAAK」は「オタク」に修正されています。

関数へのパラメータを送信します

ここで文書で使用されているコマンドは、スクリプト内の関数になる可能性があります。

このスクリプトはいくつかの車両データを関数に渡します。この関数は、それがユーザーによって入力されたかのようにデータを読み取ります。その後、変数の値が印刷されます。このスクリプトを "HEREDOC-6.sh"として保存してください。

#!/ bin / bash.

#set_car_details()関数
set_car_details()
{
メイクを読む
モデルを読む
new_usedを読む
delivery_collectを読む
ロケーションを読む
価格を読む
}

#データをset_car_details()に渡すここでの文書
set_car_details<< _MARS_ROVER_DATA
n
忍耐
中古
収集
火星(LONG、LAT)77.451865,18.445161
22億
_MARS_ROVER_DATA

#車両の詳細を取得します
エコー「作る:$ make」
エコー「モデル:$モデル」
エコー「新規または使用:$ new_used」
エコー「配達またはコレクション:$ delivery_collect」
エコー「場所:$ location」
エコー「価格\ $:$ Price」
 ./ HEREDOC-6.SH 

車両の詳細は端末ウィンドウに書き込まれます。

Eメールの作成と送信

ここで文書を使用して電子メールを作成して送信することができます。リダイレクトオペレータの前のコマンドにパラメータを渡すことができます。そうだった Linuxを使う 郵便物 指図 ローカルメールシステムを通して電子メールを送信します 「Dave」というユーザーアカウントに。 NS -NS (件名)オプションEメールの件名を指定できます。

この例では、スクリプト「heredoc-7.sh」をフォームします。

#!/ bin / bash.

記事=「ここで文書」

Mail -s 'Workload Status' Dave< _プロジェクトレポート
ユーザー名:$(whoami)
割り当てを完了しました:
記事:$第記事
_project_report 
 ./ HEREDOC-7.SH 

このスクリプトからの目に見える出力はありません。しかし、私たちがメールをチェックするとき、私たちは電子メールが作成、派遣され、そして配信されたことを見ます。

メール

ここではSSHで書類を使う

ここでは、SSH接続が確立されたら、リモートコンピュータで一部のコマンドを実行するための強力で便利な方法です。 2台のコンピュータ間でSSHキーを設定した場合、ログインプロセスは完全に自動的になります。このクイックでダーティの例では、リモートコンピュータ上のユーザーアカウントのパスワードの入力を求められます。

このスクリプトは "heredoc-8.sh"です。 「リモートPC」というリモートコンピュータに接続します。ユーザーアカウントは「Dave」と呼ばれます。私たちはを使っています -NS (疑似端末の割り当てを無効にする)オプションは、米国に割り当てられる対話式疑似端末を必要としません。

スクリプトの「ここでいくつかの作業を行う」セクションで、コマンドのリストを渡すことができ、これらはリモートコンピュータで実行されます。もちろん、リモートコンピュータにあったスクリプトを呼び出すこともできます。リモートスクリプトは、実行したいコマンドとルーチンのすべてを保持できます。

私たちのスクリプト-Eredoc-8.Sh-in-is-to insがリモートコンピュータの接続ログを更新することだけです。ユーザーアカウントと日時スタンプはテキストファイルに記録されます。

#!/ bin / bash.

ssh -t [email protected]< _remote_commands

#ここでいくつかの仕事をする

#接続ログを更新します
Echo $ USER " - " "" "$(日付)>; /home/dave/conn_log/script.log.
_remote_commands 

コマンドを実行すると、アカウントのパスワードの入力を求められます。 遠隔 コンピューター。

 ./ HEREDOC-8.SH 

リモートコンピュータに関する情報が表示され、コマンドプロンプトに戻ります。

上に 遠隔 コンピュータ、私たちは使うことができます 接続ログを確認するには

 cat conn_log / script.log 

各接続は私達にリストされています。

関連している: LinuxシェルからSSHキーを作成してインストールする方法

奇妙な名前、きちんとした機能

ここでは、特にリモートコンピュータにコマンドを送信するために使用されるときに、文書は象限ですが強力です。使用を使用してバックアップルーチンをスクリプト化するための簡単なことです rsync 。スクリプトはリモートコンピュータに接続し、残りのストレージスペースを確認し、スペースが低くなっていた場合は警告メールを送信します。

関連している: RSYNCでLinuxシステムをバックアップする方法


Linux - 最も人気のある記事

Linux用のグラフィカルデバイスマネージャを取得する方法

Linux Mar 17, 2025

アフリカスタジオ/ Shutterstock.com エンドレスがあります コンピュータのハードウェアの詳細を示すLinuxコマンドラ�..


初心者のためのドッカー:あなたが知る必要があるすべて

Linux Jun 15, 2025

ドッカー パッケージアプリケーションを作成します コンテナと呼ばれます。各コンテナは、Aの識別環境を提供します �..


Linux Mint 20.2 "UMA"の新機能

Linux Jul 8, 2025

Linux Mint、その他のうちの1つ 人気のあるLinuxディストリビューション 、「UMA」というニックネームのバージョン20.2をリリースしま..


10個の基本的なLinuxのコマンド

Linux Oct 13, 2025

ただ、Linux上で始めますか?コマンドラインで自分が快適に作ることは不可欠です。すでにコマンドラインユーティリティに精通している場..


Fedora Linuxを更新する方法

Linux Nov 10, 2025

そのため、Fedora Linuxをダウンロードしてインストールしましたが、今は疑問に思うかもしれません、あなたはどのようにしてあなたのシス�..


LinuxでDNSをフラッシュする方法

Linux Nov 14, 2025

Linuxデバイスでは、インターネットブラウジングの経験が遅いですか、それとも訪問しているWebサイトは時代遅れですか、それとも間違ったWeb�..


LinuxのSudoersファイルにユーザーを追加する方法

Linux Oct 30, 2025

もし sudo Linuxのコマンドは、ユーザーが「Sudoersファイルにない」というメッセージを受け取ります。「sudoers」リストに載る必要があり�..


pidofまたはpgrepを使用したLinuxプロセスのPIDを見つける方法

Linux Nov 15, 2025

Linuxプロセスを使用することは、多くの場合、プロセスIDまたはPIDを知ることを意味します。 それは、実行中の各ソフトウェアに与えられたユ�..


カテゴリ