有一个脚本要求我输入密码才能继续:
bash-3.2$ ./script.sh <parameter_list>
Enter the password for the Database:
..
..
我有兴趣将脚本的标准输出捕获到日志文件中,同时安全地将密码传递给脚本。
我尝试将密码传递到标准输入,如下所示:
bash-3.2$ echo "<password>" > /secure/path/password.txt
bash-3.2$ ./script.sh <parameter_list> < /secure/path/password.txt
但这似乎不起作用。如果是这样,我可以简单地tee
将输出重定向到日志文件。
答案1
我想你想要expect
。该工具可以与需要用户输入的命令交互地工作。当然,主要的陷阱是你必须知道要做什么预计。
示例(借自http://www.thegeekstuff.com/2010/10/expect-examples/)
#!/usr/bin/expect
set timeout 20
spawn "./hello.pl"
expect "hello"
send "no match : <$expect_out(buffer)> \n"
send "match : <$expect_out(0,string)>\n"
interact
答案2
关于什么
echo "password" | ./script.sh parameter_list ... > output.file
如果这不起作用,那么回答这个问题:脚本使用什么机制从用户那里获取密码。如果它类似于 ssh 密码,则通过标准输入发送将不起作用。
答案3
如果这是您自己的脚本,也许您可以将交互式输出发送到stderr
.