如何通过shell脚本为提示提供输入值?

时间:2014-08-30 01:26:15

标签: linux bash shell

我正在编写一个包装器shell脚本wrapper.sh来运行其他人拥有的其他已经可用的脚本,我无法触及这些脚本。

问题是,有一个脚本运行一些特定于数据库的活动 - db_perf_clean.sh。该脚本通常手动执行,并在运行时提示输入密码。我无法将密码作为参数提供给它,我无法修改该脚本。因此我知道db密码,我可以在wrapper.sh中提供它。

请告诉我如何在db_perf_clean.sh内运行wrapper.sh脚本,就像在静音模式下一样。

2 个答案:

答案 0 :(得分:2)

有时脚本会坚持从tty读取密码。通常,它会从标准输入读取。如果是这样,请尝试:

echo password | db_perf_clean.sh

以上缺点是密码会显示在ps中。为避免这种情况,请将密码隐藏在文件中,并将该文件用于stdin:

db_perf_clean.sh <file_with_password

如果你想让命令保持沉默,你可以抛弃它的输出:

db_perf_clean.sh <file_with_password >/dev/null 2>&1

在bash下,与通用shell相反,可以略微简化:

db_perf_clean.sh <file_with_password &>/dev/null

答案 1 :(得分:0)

我发现了一些不同的方法,而不是在文件中编写密码,这也有效 - &gt;

db_pass="somevalue"
sh db_perf_clean.sh<<EOM
$db_pass
EOM