Я пишу сценарий для организации экземпляра Google Cloud SQL с помощью gcloud
SDK.
В SDK есть команда connect, которая принимает имя пользователя, но пароль необходимо вводить в приглашении, т. е. его нельзя передавать в качестве аргумента.
Успешная аутентификация позволяет выполнить запрос — поток выглядит следующим образом:
$ gcloud sql connect instance-name --user=root
Whitelisting your IP for incoming connection for 5 minutes...done.
Connecting to database with SQL user [root].Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 8054
Server version: 5.7.14-google-log (Google)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> USE tablename;
Мне нужно сделать это неинтерактивно. Я пытался:
gcloud sql connect instance-name --user=root && echo "password" && echo "USE tablename;"
Но он выполняет только первую команду.
Как я могу подключиться, аутентифицировать и выполнить запрос в одной команде?
Обновление:
Согласно комментарию @danlor со ссылкой на этот вопрос, я пробовал оба:
yes password | gcloud...
а также
printf 'password\n' | gcloud...
но оба по-прежнему запрашивают пароль.
&&
означает, что следующая команда будет выполнена только после чистого выхода (успеха) предыдущей команды. Вот почему выполняется только первая команда. Проверьте askubuntu.com/questions/338857/ - person danrodlor   schedule 14.05.2019yes
иprintf
в связанном ответе, но ни один из них не работает - person Adam Hopkinson   schedule 14.05.2019