如何在接口请求时使用shell脚本提供密码

时间:2010-02-11 06:16:18

标签: shell expect

我有一个脚本( dobrt ),在执行时会要求输入密码。如何编写执行 dobrt 的脚本并自动提供密码< / strong>它要求。

当我执行./dobrt -p file.txt时,系统会要求输入密码。我希望脚本自动发送密码。这是输出

$ ./dobrt -p file.txt
Found 194 tests to execute
------------ 2010 February 11 11:27:33 ------------
Password: *************** 

我尝试使用shell和expecxt脚本。这就是我所做的。

我有2个脚本。我从第一个脚本(run_dobrt.sh)调用第二个脚本(run_dobrt.exp)。

脚本1:run_dobrt.sh

#!/bin/ksh

TESTCASE_HOME="/home/abhijeet/code/testcases";
TESTCASE_LIST="file.txt";
PASSWORD="*****";

echo "Running Expect Script"
`./run_dobrt.exp $TESTCASE_HOME $TESTCASE_LIST $PASSWORD`

脚本2:run_dobrt.exp

#!/usr/local/bin/expect -f
set TESTCASE_HOME [lindex $argv 0];
set TESTCASE_LIST [lindex $argv 1];
set PASSWORD [lindex $argv 3];

set timeout 200
spawn $TESTCASE_HOME/dobrt -p $TESTCASE_HOME/$TESTCASE_LIST
expect "*?assword:*" {send -- "$PASSWORD\r";}
expect eof

现在当我运行run_dobrt.sh时,我收到以下错误 run_dobrt.sh [20]:spawn:not found 如何摆脱这个错误并完成这项任务?请帮忙。

3 个答案:

答案 0 :(得分:1)

什么是dobrt?是一个自制的程序?如果是这种情况,我认为你将不得不重新编码它来解析一个接受密码的额外参数。然后你就可以将这个passowrd传递给dobrt,就像你在命令行中那样“-p file.txt”(通过脚本)。

答案 1 :(得分:1)

我看到两个问题:

  1. 在shell脚本的最后一行,删除命令周围的后引号`` 它们将导致expect脚本的输出作为shell命令执行。
  2. 在expect脚本中,更改

    设置PASSWORD [lindex $ argv 3];

  3. set PASSWORD [lindex $argv 2]; 
    
    你正在跳过争论。

答案 2 :(得分:0)

如果密码是dobrt提示的唯一输入,您可以尝试:

脚本1:run_dobrt.sh

#!/bin/ksh 

TESTCASE_HOME="/home/abhijeet/code/testcases"; 
TESTCASE_LIST="file.txt"; 
PASSWORD="*****"; 

./run_dobrt.exp $TESTCASE_HOME $TESTCASE_LIST << EOF
$PASSWORD
EOF