2

我正在尝试编写一个运行mysqldump使用该-p标志的命令的 bash 脚本。此标志提示用户输入密码,直接在 shell 中运行时按预期工作,但在脚本中运行时不会出现。

#!/usr/bin/env 

ssh user@domain.com 'mysqldump -u mysqluser -p --databases foo | bzip2' > ~/temp/foo-dump.sql.bz2

现在我可以在脚本中嵌入密码或将其作为参数传递,但我真的希望脚本提示用户输入密码,这样密码就不会出现在我的脚本存储库或我的 bash 历史记录中。

任何人都知道如何做到这一点?

4

1 回答 1

1

这应该可以解决问题:

read -p "mysql password: " PASS && ssh user@domain.com 'mysqldump -u mysqluser -p'$PASS' --databases foo | bzip2' > foo-dump.sql.bz2 ; PASS=""

在这种情况下,您将首先输入 mysql 密码,然后系统会提示您输入 ssh 密码。请注意,mysql 密码不会被隐藏,即有人可以从您的肩膀上读取它。如果你想避免这种情况,请使用标志-s

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

另请注意,“p”(在 -p 中表示密码)和密码变量的引号之间不能有任何空格。

此外,您的 shebang 没有指定使用哪个解释器,这可能是个问题。我建议你使用#!/bin/bashor #!/usr/bin/env bash

于 2013-04-22T20:28:38.247 回答