我通常会sudo mysql database < database.dump
在提示时运行并输入密码。
为了实现自动化,我尝试执行echo 'password' | sudo -S mysql database < database.dump
但它无法识别我的密码。
我可以sudo -S
正常执行其他命令。可能是什么问题?
答案1
如果您需要以 root 身份执行此类操作,请正确执行。
/usr/local/bin/
在类似中创建一个新脚本/usr/local/bin/my_mysql_task
。它需要由 root 和chmod +x
ed 拥有。这里重要的是,除了 root 之外,没有人可以编辑它。然后让您的用户以 root 身份运行该脚本而无需密码,方法是运行
sudo visudo
并添加以下内容:username ALL=NOPASSWD: /usr/local/bin/my_mysql_task
现在,您不仅不会到处泄露您的帐户密码(ps
大多数其他用户都会看到),而且根本不会泄露,从而解决了您的核心问题。
永远不要嵌入密码。这是没有必要的。
答案2
出现此问题的原因是您在同一个命令中使用了管道和输入重定向,并且在这种情况下sudo
尝试从文件中读取密码database.dump
。正确的方法是:
mysql_cmd="mysql database < database.dump"
echo 'password' | sudo -S $mysql_cmd
或者:
alias mysql_cmd="mysql database < database.dump"
echo 'password' | sudo -S mysql_cmd
echo "password" | sudo -S sh -c "mysql database < database.dump"