2010-02-11 100 views
2

我有一個腳本(dobrt),它在執行了password.How我可以寫一個腳本,執行dobrt並自動提供問它要求的密碼如何使用shell腳本時,界面會要求提供密碼就

當我執行./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:找不到 如何擺脫此錯誤並完成此任務?請幫忙。

回答

1

什麼是dobrt?是一個自制的程序?如果是這種情況,我認爲你將不得不重新編碼它來解析接受密碼的額外參數。然後,您將能夠將此passowrd傳遞給dobrt,就像您在命令行(通過腳本)執行「-p file.txt」一樣。

+0

具有不同密碼的用戶使用此腳本。因此不適合對密碼進行硬編碼。 – Abhijeet 2010-02-11 07:32:37

+0

我沒有正確解釋自己。我的意思是讓用戶通過命令行參數輸入密碼。不要在應用程序內硬編碼密碼。 – mgfernan 2010-02-11 19:46:55

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 
1

我看到兩個問題:

  1. 在shell腳本的最後一行,除去命令周圍的反引號「 」,它們將導致期望腳本的輸出執行定爲shell命令。
  2. 在expect腳本,改變

    設置密碼[LINDEX $ ARGV 3]。

set PASSWORD [lindex $argv 2]; 

你逃課的理由。