2017-02-14 99 views
2

我将密码存储在变量$ db_pwd中,我想将它传递给shell脚本中的mysql_config_editor。我无法使用配置文件或db_pwd环境变量。使用shell中的变量将密码传递给mysql_config_editor

我这样做

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

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

它所要求的是输入密码“Enter Password”,但我希望使用变量提供密码。

我尝试这样做:

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

更新:您可以欺骗mysql_config_editor以为它是从一个交互式终端阅读,使用unbuffer utility

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

是的,它不起作用。我正在用我尝试过的其他方法编辑这个问题。 –