我正在尝试编写一个运行mysqldump
命令的bash脚本,该命令使用-p
标志。此标志提示用户输入密码,该密码在shell中直接运行时按预期工作,但在脚本中运行时不会显示。
#!/usr/bin/env
ssh user@domain.com 'mysqldump -u mysqluser -p --databases foo | bzip2' > ~/temp/foo-dump.sql.bz2
现在我可以在脚本中嵌入密码或将其作为参数传递,但我真的希望脚本提示用户输入密码,因此密码不会出现在我的脚本仓库或我的bash历史记录中。
任何人都知道如何做到这一点?
答案 0 :(得分: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/bash
或#!/usr/bin/env bash
。