2017-11-08 5 views
1

bashシェルでは、環境変数で引数を渡したいと思います。 "-e" のオプション値として渡される - このような ...環境変数で引数をスペースで渡すには?

$ export DOCKER_OPTIONS="-p 9200:9200 -e ES_JAVA_OPTS='-Xmx1g -Xms1g' -d " 
$ docker run -d $DOCKER_OPTIONS elasticsearch 

私は " 'Xmx1g -Xms1g' ES_JAVA_OPTS =が" することを期待しています。しかし、私は方法を見つけることができませんでした。

$ set -x 
$ docker run -d $DOCKER_OPTIONS elasticsearch 
+ docker run -d -p 9200:9200 -e 'ES_JAVA_OPTS='\''-Xmx1g' '-Xms1g'\''' elasticsearch 
unknown shorthand flag: 'X' in -Xms1g' 

別のオプションとして、この-Xms1gが分離されています。

$ docker run -d "$DOCKER_OPTIONS" elasticsearch 
+ docker run -d '-p 9200:9200 -e ES_JAVA_OPTS='\''-Xmx1g -Xms1g'\''' elasticsearch 
docker: Invalid containerPort: 9200 -e ES_JAVA_OPTS='-Xmx1g -Xms1g'. 

これは、パラメータをまとめてまとめたものです。

どうすればよいですか?

答えて

2

これらの不自然な解析の問題を回避するには、配列を使用します。配列は、それらを定義するときに特別な引用符を使用する必要がないため、優れています。引用符で慎重にする必要がある唯一の場所は、それらを展開するときです:常に引用符を入れて"${array[@]}"

dockerOptions=(-p 9200:9200 -e ES_JAVA_OPTS='-Xmx1g -Xms1g' -d) 
docker run -d "${dockerOptions[@]}" elasticsearch 

あなたは、コマンドラインではなく、環境変数などを経由してドッカーするオプションを渡しているので、exportが必要とされないことに注意してください。

また、すべての大文字の名前はシェル用に予約されています。独自の変数を定義するときは、それらを避けるのが最善です。

関連する問題