シェルスクリプトでヒアドキュメントを使用する方法
ヒアドキュメント( Heredoc )は、特別なコードブロックとして扱われる入力またはファイルストリームリテラルです。このコードブロックは、処理のためにコマンドに渡されます。 ヒアドキュメント UNIXに由来 シェルであり、sh、tcsh、ksh、bash、zsh、cshなどの一般的なLinuxシェルで見つけることができます。特に、Perl、Ruby、PHPなどの他のプログラミング言語もヒアドキュメントをサポートしています。
ヘルドックの構造
ヒアドキュメント 2つの山かっこを使用(<<)
その後に区切り文字トークンが続きます 。同じ区切り文字トークンを使用して、コードのブロックを終了します。区切り文字内にあるものはすべて、コードのブロックと見なされます。
以下の例を見てください。コードのブロックをcatコマンドにリダイレクトしています。ここでは、区切り文字は「ブロック」に設定されています 」と同じ「ブロック」で終了します 「。
cat << BLOCK Hello world Today date is $(date +%F) My home directory = ${HOME} BLOCK
注 :ブロックを開始および終了するには、同じ区切り文字トークンを使用する必要があります。
複数行のコメントを作成する
現在bashでコーディングしている場合、bashはデフォルトで Cのような複数行のコメントをサポートしていないことをご存知かもしれません。 またはJava 。 ヒアドキュメントを使用できます これを克服するために。
これは、複数行のコメントをサポートするbashの組み込み機能ではなく、単なるハックです。 ヒアドキュメントをリダイレクトしない場合 どのコマンドに対しても、インタプリタはコードのブロックを読み取るだけで、何も実行しません。
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
空白の処理
デフォルトでは、ヒアドキュメント 空白文字(タブ、スペース)は抑制されません。 dash (-)
を追加することで、この動作をオーバーライドできます (<<)
の後 区切り文字が続きます。これにより、すべてのタブスペースが抑制されますが、空白は抑制されません。
cat <<- BLOCK This line has no whitespace. This line has 2 white spaces at the beginning. This line has a single tab. This line has 2 tabs. This line has 3 tabs. BLOCK
変数とコマンドの置換
ヒアドキュメントは変数置換を受け入れます。変数は、ユーザー定義変数または環境変数にすることができます。
TODAY=$(date +%F) cat << BLOCK1 # User defined variables Today date is = ${TODAY} #Environ Variables I am running as = ${USER} My home dir is = ${HOME} I am using ${SHELL} as my shell BLOCK1
同様に、ヒアドキュメント内で任意のコマンドを実行できます コードブロック。
cat << BLOCK2 $(uname -a) BLOCK2
特殊文字のエスケープ
特殊文字をエスケープする方法はいくつかあります。キャラクターレベルまたはドキュメントレベルのどちらでも実行できます。
個々の特殊文字をエスケープするには、円記号(\)を使用します 。
cat << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = ${TODAY} BLOCK5
ブロック内のすべての特殊文字をエスケープするには、区切り文字を一重引用符、二重引用符で囲むか、区切り文字の前に円記号を付けます。
cat << 'BLOCK1' I am running as = ${USER} BLOCK1 cat << "BLOCK2" I am running as = ${USER} BLOCK2 cat << \BLOCK3 I am running as = ${USER} BLOCK3>
これで、ヒアドキュメントの構造がわかりました。 そしてそれがどのように機能するか、いくつかの例を見てみましょう。 ヒアドキュメントを使用する2つの一般的な領域 SSHを介してコマンドのブロックを実行し、ヒアドキュメントを介してSQLクエリを渡します 。
以下の例では、SSHを介してリモートサーバーでコードのブロックを実行しようとしています。
以下の例では、選択を渡します psqlへのステートメント データベースに接続してクエリを実行します。これは、 psqlでクエリを実行する別の方法です。 -f
を使用する代わりにbashスクリプト内 .sqlを実行するためのフラグ ファイル。
#!/usr/bin/env bash UNAME=postgres DBNAME=testing psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK
この記事は以上です。 ヒアドキュメントでできることは他にもたくさんあります 例で示したものと比較して。 ヒアドキュメントで役立つハックがある場合 読者がその恩恵を受けることができるように、コメントセクションに投稿してください。
-
Google ファミリー リンクを使用してアプリをブロックする方法
進化するテクノロジーと変化するトレンドの中で、追いつくのは非常に困難です。家に子供がいる場合、親は特に注意する必要があります。テクノロジーは日進月歩で進化し、私たちのライフスタイルも変化しています。スマートフォンの普及と豊富なアプリにより、子供の活動を追跡することは不可能になりつつあります。親はしばしば、子供のあらゆる動きを監視しようとします。しかし、両親がともに働いているため、24 時間年中無休で子供たちを監視することはできません。そんな時こそ、それを支援するアプリやサービスが必要です。 Google にはそのためのソリューションがあります。 Google ファミリー リンクを使用すると、
-
Windows 10 で SSH セキュア シェルを使用するには?
コンピュータをリモート デスクトップまたはネットワーク経由で接続してデータを共有する場合は、Secure Shell が必要です。このブログでは、Windows 10 で SSH セキュア シェルを使用する方法を学習します。SSH セキュア シェルは、デバイスとインターネットを含む任意のネットワーク間の通信システムと見なすことができます。このシステムは暗号化されており、ハッカーやその他のスパイウェア、アドウェア、マルウェアが、ユーザーがアクセスしたりデータを受信したりしているサイトや場所に関する詳細を取得できないため、安全です。 Linux オペレーティング システムは Windows よりも