在bash shell上,我想通过环境变量传递参数。 像这样...
$ export DOCKER_OPTIONS="-p 9200:9200 -e ES_JAVA_OPTS='-Xmx1g -Xms1g' -d "
$ docker run -d $DOCKER_OPTIONS elasticsearch
我希望“ES_JAVA_OPTS =' - Xmx1g -Xms1g'”作为选项值“-e”传递。但我找不到办法。
$ 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'.
这将参数捆绑在一起。
我该怎么办?
答案 0 :(得分:3)
使用数组来规避这些尴尬的解析问题。数组非常棒,因为在定义它们时不需要做任何特殊的引用。唯一需要注意引号的地方是扩展它们时:始终在"${array[@]}"
附近加上引号。
dockerOptions=(-p 9200:9200 -e ES_JAVA_OPTS='-Xmx1g -Xms1g' -d)
docker run -d "${dockerOptions[@]}" elasticsearch
请注意,由于您通过命令行而不是环境变量将选项传递给docker,因此不需要export
。
此外,所有大写名称都保留给shell。在定义自己的变量时,最好避免使用它们。