2011-04-20 84 views
0

這是我的腳本ExpectJ冒險

echo "Name:" 
read name 
if [ "$name" == "abcd" ]; then 
    echo "correct username" 
    echo "Password:" 
    read password 
    if [ "$password" == "pwd" ]; then 
     echo "Hello" 
    else 
     echo "Wrong password" 
    fi 
else 
    echo "wrong username" 
fi 

================================ =================================================

這是我的Java代碼

import java.io.IOException; 
import java.util.*; 

import expectj.*; 

public class Trial { 
    public static void main(String[] args) { 

     ExpectJ exp = new ExpectJ(); 
     String command = "sh /root/Desktop/hello.sh"; 
     Spawn s = null; 
     try {   
      s = exp.spawn(command);   
      s.expect("Name:"); 
      s.send("abcd\n"); 
      System.out.println("Current status: "+s.getCurrentStandardOutContents());   
      s.expect("correct username"); 
      s.expect("Password:"); 
      s.send("pwd\n"); 
      s.expect("Hello"); 
      System.out.println("final output: " + s.getCurrentStandardOutContents()); 
      System.out.println("Possible errors: " + s.getCurrentStandardErrContents()); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      System.out.println("ioe\n"); 
     } catch (TimeoutException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      System.out.println("toe\n"); 
     } finally { 
      if (s != null) 
       s.stop();   
     }  
    } 
} 

=================================== =========================================

這是我OUTPUT

Name: 
Current status: Name: 
correct username 
Password: 

================================== ==========================================

它沒有進一步發展。其並無終止或者..我不知道爲什麼..

回答

0

我得到it..2連續s.expect()語句不能work..So擺脫它,一個\ n可以添加..

在這種情況下

s.expect(「正確的用戶名」);
s.expect(「Password:」);

未綁定到work.So,應該逐個

s.expect更換(「正確的用戶名\ n密碼:」); //這將工作

1

是否在您發表評論這一行它的工作:

System.out.println("Current status: "+s.getCurrentStandardOutContents()); 

也許應用是「期待」值"correct username",但看到"Current status: Name:「而不是(」調試「行的輸出)。不是jExpert的專家,但是如果該工具只是重定向並監視System.out,它將看到腳本輸出以及打印到控制檯的所有內容。

+0

是該行的作品,因爲它的印刷輸出。我猜這是沒有問題的..因爲控制是來s.expect(「密碼:」); ,但它沒有成功地從腳本中獲取pwd ..我不明白爲什麼會發生這種情況。 – hari 2011-04-20 12:46:02

+0

控制權不是來自s.send(「pwd \ n」); – hari 2011-04-21 05:05:12