docker 在 bash whileloop 中使用 grep 命令

docker cmd in bash whileloop with grep

您好,我想在 bash 中为 docker 使用一个简单的“健康检查”,如下所示:

while ["$(docker exec -it ${mysql_name} mysql -u${mysql_user} -p${mysql_user_password} -e "SHOW DATABASES;" | grep ${mysql_name})" != ${mysql_name}]
do
   sleep 1
   echo "waiting for database..."
done

但我只得到“mysql/test.sh: line 21: $'| nextcloud_db |\r': command not found”。所以看起来 bash 正在尝试输出 grep 而我不知道:(

"| nextcloud_db |" 是 while

中 cmd 的输出

单个 docker cmd + grep 有效

编辑:也许最好检查 grep 是否为真? (而不是这个“!= ${mysql_name}”(顺便说一句。我猜这不会起作用,它不是“字符串不等于 var”它的“字符串包含 var”))

所以对于其他菜鸟:)。在 [ 和 ] 之前设置空格很重要

while [ "$(grep ${mysql_name} <<< $(docker exec ${mysql_name} mysql -u${mysql_user} -p${mysql_user_password} -e 'SHOW DATABASES;'))" != ${mysql_name} ]
do
    echo "waiting for database..."
    sleep 5
done

它并不完美,因为我得到了 docker cmd 输出的第一行(mysql:[警告] 在命令行界面上使用密码可能不安全。)但它有效对我来说(我讨厌我这么说...)

编辑:while 中的 "" 是正确工作所必需的吗?!