如何捕获依赖于用户某些输入的脚本的标准输出?

如何捕获依赖于用户某些输入的脚本的标准输出?

有一个脚本要求我输入密码才能继续:

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.

相关内容