Обычно я запускаю sudo mysql database < database.dump
и набираю пароль в командной строке.
Чтобы автоматизировать это, я попытался выполнить echo 'password' | sudo -S mysql database < database.dump
, но он не распознает мой пароль.
Я могу sudo -S
другие команды нормально. В чем может быть проблема?
Если вам нужно сделать что-то вроде этого как 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
большинству других пользователей), но вы не подключаете его вообще, решая, таким образом, вашу основную проблему.
Никогда не вставляйте пароли. Это не обязательно.
Проблема возникает из-за того, что вы используете перенаправление каналов и ввода в одной и той же команде, и в этом случае 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"