2013-04-22 169 views
2

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

#!/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”(在-p密码)和密码变量引号之间的任何空间。

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

+0

嗯,没有工作。我可以在运行脚本后输入文本,但它不是一个明确的提示,并且脚本不会处理到实际转储。 – 2013-04-25 17:13:03

+0

我已经添加了mysql密码的显式提示。你为什么说“脚本不处理实际转储”?发生什么事?它给你一个空的文件?它会抛出一个错误? – msb 2013-04-25 21:43:09

+0

没有文件,没有明确的错误,它只是不进行 – 2013-04-25 21:48:28