2017-02-14 8 views
2

У меня есть пароль, хранящийся в переменной $ db_pwd, и я хочу передать его в mysql_config_editor в сценарии оболочки. Я не могу использовать переменную окружения config или db_pwd.Передать пароль mysql_config_editor с использованием переменной в оболочке

Я делаю это

mysql_config_editor set --login-path=local --host=localhost --user=username --password 

(https://stackoverflow.com/a/20854048/6487831).

Что он делает, так это спрашивать пароль «Введите пароль», но я хочу указать пароль с помощью переменной.

Я попытался это:

mysql_config_editor set --login-path=local --host=localhost --user=username --password $db_pwd 

и

mysql_config_editor set --login-path=local --host=localhost --user=username --password | echo $db_pwd 

и

echo "$db_pwd" | mysql_config_editor set --login-path=local --host=localhost --user=username --password 

и

  • expect. Но это приводит к ошибке в случае появления предупреждений типа «Этот путь уже существует, переписывает (y/n).
  • файл параметров, но они все равно дают мне переменную не найденную ошибку, даже если я использую ее в качестве первого аргумента. является ли файл опций совместим с редактором MySQL конфигурации?

Любой способ сделать это? Или я должен вернуться к использованию mysql вместо mysql_config_editor?

+0

см https: // stackoverflow.com/a/22513843/1497139 –

ответ

0

--password аргумент предназначен явно избежать передачи пароля по команде поскольку это считается плохим обеспечением.

При этом, вы можете попробовать кормить пароль mysql_config_editor в любом случае:

echo "$db_pwd" | mysql_config_editor set --login-path=local --host=localhost --user=username --password 

(Это может не сработать, если mysql_config_editor настаивает на получении входного сигнала от текущего терминала вместо стандарта; если это так, у вас нет способа предоставить пароль из переменной).

В качестве ответа, который вы связываете с состояниями, вы можете использовать mysql непосредственно для предоставления пароля. Использование mysql_config_editor предназначено для хранения пароля в .mylogin.cnf в зашифрованном виде (т. Е. Вы отправляете пароль один раз с терминала, затем шифруются и сохраняются в файле конфигурации, а mysql может использовать его оттуда).

Ссылка: https://dev.mysql.com/doc/refman/5.7/en/mysql-config-editor.html

Update: Вы можете быть в состоянии обмануть mysql_config_editor, думая, что читает из интерактивного терминала, используя unbuffer utility:

echo "$db_pwd" | unbuffer -p mysql_config_editor set --login-path=local --host=localhost --user=username --password 
+0

Да, это не работает. Я редактирую вопрос другими методами, которые я пробовал. –