2016-08-06 73 views
4

私はSQLを含むbashスクリプトを実行する必要があるので、私はここにドキュメントによると、Postgresのドッカーコンテナにカスタム構成を追加するためのスクリプトを使用しています:SQLの実行時にBashの `<< -EOSQL`コードブロックとは何ですか?

https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image

しかし、私は何を知りませんEOSQLを意味します。上記のドキュメントから作成したスクリプトの例を次に示します。

#!/bin/bash 
set -e 

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL 
    CREATE USER docker; 
    CREATE DATABASE docker; 
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker; 
    CREATE EXTENSION $MY_EXTENSION; 
EOSQL 

EOSQLとは何ですか?私はこのコマンドやキーワードに関する多くの情報を見つけることができません。

+0

コードは問題ありません。このスクリプトを実行する前に 'MY_EXTENSION'をエクスポートしたことはありますか? – chepner

+1

'EOSQL'はキーワードではありません。これは、ここのドキュメントの境界をマークするために使用される任意の文字列(End Of SQL)です。 – chepner

+0

ああ、環境変数は正常に動作しています。私は別のエラーが発生していました。私は、環境変数が読み込まれなかったことが原因だと考えました。私は、私の誤解の原因となったEOSQLブロックとBash Here Documentに関する質問を更新しました。 – modulitos

答えて

7

EOSQLは、Bash Here Documentブロックの制限文字列です。制限文字列には、ブロックに表示されないテキストを使用できます。これは、テキストブロックの開始と終了を示します。ドッカーで

$ MY_EXTENSION=something ./test.sh 
something 

あなたにあなたのDockerfiledocker run -e MY_EXTENSION=something <image>ENV MY_EXTENSION=somethingが必要になります。

#!/usr/bin/env bash 
cat <<-EOF 
$MY_EXTENSION 
EOF 

が続いて変数セットでいることを実行している:

変数置換は、ここでは文書で、通常のように動作します設定する環境のコマンドライン。

関連する問題