アンドロイド

Bashヒアドキュメント

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

目次:

Anonim

シェルスクリプトを記述するとき、 tee cat 、または sftp などの対話型コマンドに複数行のテキストブロックまたはコードを渡す必要がある場合があります。

BashおよびZshなどの他のシェルでは、ヒアドキュメント(Heredoc)は、コマンドに複数行の入力を渡すことができるリダイレクトの一種です。

HereDocを記述する構文は次の形式を取ります。

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • 最初の行はオプションのコマンドで始まり、特別なリダイレクト演算子 << と区切り識別子が続きます。
    • 区切り識別子として任意の文字列を使用でき、最も一般的に使用されるのはEOFまたはENDです。区切り識別子が引用符で囲まれていない場合、シェルはヒアドキュメントの行をコマンドに渡す前にすべての変数、コマンド、および特殊文字を置き換えます。リダイレクト演算子 <<- にマイナス記号を <<- と、すべての先行タブ文字が無視されます。 これにより、シェルスクリプトでヒアドキュメントを記述するときにインデントを使用できます。 先頭の空白文字は許可されず、タブのみが許可されます。
    here-documentブロックには、文字列、変数、コマンド、およびその他のタイプの入力を含めることができます。最後の行は区切り識別子で終わります。 区切り文字の前の空白は許可されません。

基本的なHeredocの例

このセクションでは、heredocの使用方法の基本的な例をいくつか見ていきます。

Heredocは、catコマンドと組み合わせて最もよく使用されます。

次の例では、ヒアドキュメントを使用して、環境変数とコマンドを含む2行のテキストを cat 渡します。

cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF

以下の出力からわかるように、変数とコマンド出力の両方が置き換えられます。

The current working directory is: /home/linuxize You are logged in as: linuxize

区切り文字を一重引用符または二重引用符で囲むとどうなるかを見てみましょう。

cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF

区切り文字が引用符で囲まれている場合、パラメーターの展開とコマンドの置換はシェルによって行われないことに気付くことができます。

The current working directory is: $PWD You are logged in as: $(whoami)

if true; then cat <<- EOF Line with a leading tab. EOF fi

Line with a leading tab.

画面に出力を表示する代わりに、 > >> 演算子を使用して出力をファイルにリダイレクトできます。

cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF

file.txtが存在しない場合は作成されます。 > を使用すると、ファイルは上書きされ、 >> は出力をファイルに追加します。

ヒアドキュメントの入力もパイプすることができます。 次の例では、 sed コマンドは l 文字のすべてのインスタンスを e 置き換えます。

cat <<'EOF' | sed 's/l/e/g' Hello World EOF

Heeeo Wored

パイプされたデータをファイルに書き込むには:

cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF

SSHでHeredocを使用する

Heredocを使用することは、SSHを介してリモートシステムで複数のコマンドを実行する最も便利で簡単な方法の1つです。

引用符で囲まれていない区切り文字を使用する場合は、すべての変数、コマンド、および特殊文字をエスケープする必要があります。エスケープしないと、ローカルで補間されます。

ssh -T [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF

The current local working directory is: /home/linuxize The current remote working directory is: /home/user

SSHキーベースの認証を設定し、パスワードを入力せずにLinuxサーバーに接続することもできます。

結論

このガイドでは、 heredoc とは何か、シェルスクリプトでそれを使用する方法を学びました。

バッシュターミナル