在脚本中而不是通过env var填充变量

热肉丸汤

请注意:即使这个问题提到了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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章