请注意:即使这个问题提到了MySQL和Docker,它实际上也没有任何关系,任何有学问的bash脚本编写者都应该回答。
我的bash脚本在这里生锈。我正在查看官方的MySQL 8.0 Dockerfile,看到它调用并运行了一个名为的bash脚本docker-entrypoint.sh
。查看该脚本,它似乎(有条件地)运行了创建数据库的代码片段(如果尚不存在):
if [ "$MYSQL_DATABASE" ]; then
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
mysql+=( "$MYSQL_DATABASE" )
fi
我想知道该脚本在哪里期望MYSQL_DATABASE
从中填充变量。如果它被期待MYSQL_DATABASE
成为一个可选的环境变量,我本来预期(从我承认生锈的回忆),如果-条件看起来是这样的:
if [ -z "$MYSQL_DATABASE" ]; then
...
fi
我想可能是MYSQL_DATABASE
该脚本的运行时参数,但是我不希望这样做,因为Dockerfile不会将任何args传递给脚本调用。
谁能帮我找到MYSQL_DATABASE
一个有关数据库名称的信息(例如“ my_db
”),以便在运行此脚本时为我创建数据库?
就shell脚本而言,环境变量只是恰好从环境继承的变量,它不会改变该变量的行为。
因此,要了解代码的作用,您无需知道变量的“类型”,仅需在代码中指定该变量的名称即可。然后,您需要了解有关[
(aka test
)命令的事实:
STRING
: 相当于-n STRING
和
-n STRING
:的长度STRING
非零
所以所有的[ "$MYSQL_DATABASE" ]
意思是“$MYSQL_DATABASE
在代码的这一点上变量的长度是否大于零?”
无论在脚本运行之前(例如,将其预设为环境变量)还是在脚本“内部”计算得出该变量,您都只能通过通读来查找。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句