2013-04-22 3 views
2

Я пытаюсь написать сценарий bash, который запускает команду mysqldump, которая использует флаг -p. Этот флаг запрашивает у пользователя пароль, который работает как ожидалось при запуске в оболочке напрямую, но не появляется при запуске в скрипте.Подсказка для пароля MySQLDump в сценарии bash?

#!/usr/bin/env 

ssh [email protected] 'mysqldump -u mysqluser -p --databases foo | bzip2' > ~/temp/foo-dump.sql.bz2 

Теперь я мог вставлять пароль в скрипте или передать его в качестве аргументов, но я действительно хочу, сценарий предложит пользователю ввести пароль, так что пароль не отображается в моем сценарии репо или моя история bash.

У кого-нибудь есть идея, как это сделать?

ответ

1

Это должно сделать трюк:

read -p "mysql password: " PASS && ssh [email protected] 'mysqldump -u mysqluser -p'$PASS' --databases foo | bzip2' > foo-dump.sql.bz2 ; PASS="" 

В этом случае вы сначала ввести пароль MySQL, а затем будет предложено ввести пароль SSH. Обратите внимание, что пароль mysql не будет скрыт, т. Е. Кто-то может прочитать его через плечо. Если вы хотите, чтобы избежать этого, используйте флаг -s

read -s -p "mysql password: " PASS && ... 

Заметим также, что не должно быть никакого пространства между «р» (в -p для пароля) и кавычками для переменной пароля.

Кроме того, ваш shebang не указывает, какой интерпретатор использовать, что может быть проблемой. Я предлагаю вам использовать #!/bin/bash или #!/usr/bin/env bash.

+0

Хм, не работал. Я могу ввести текст после запуска скрипта, но это не явный прорыв, и скрипт не обрабатывается фактическим дампом. –

+0

Я добавил явное приглашение для пароля mysql. Почему вы говорите: «сценарий не обрабатывает фактический дамп»? что происходит? он дает вам пустой файл? это порождает ошибку? – msb

+0

Нет файла, нет явной ошибки, он просто не обрабатывает –

Смежные вопросы