2011-07-08 231 views
3

我試圖從我的Java應用程序(在我的Windows 7站點)使用ssh api Jsch在unix服務器中執行腳本shell。無法使用Jsch執行.sh腳本

我使用的腳本shell「start_lm」是一個C二進制文件。

這是我正在使用的代碼(它從Jsch網站exemples的)

 try{ 
     JSch jsch=new JSch(); 

     Session session=jsch.getSession(user, host, 22); 

     UserInfo ui=new MyUserInfo(); 
     session.setUserInfo(ui); 
     session.connect(); 

     String command="user/psi/start_lm"; 

     Channel channel=session.openChannel("exec"); 
     ((ChannelExec)channel).setCommand(command); 

     channel.setInputStream(null); 

     ((ChannelExec)channel).setErrStream(System.err); 

     InputStream in=channel.getInputStream(); 

     channel.connect(); 

     while(true){ 

     if(channel.isClosed()){ 
      System.out.println("exit-status: "+channel.getExitStatus()); 
      break; 
     } 
     try{Thread.sleep(1000);}catch(Exception ee){} 
     } 
     channel.disconnect(); 
     session.disconnect(); 
    } 

我得到的錯誤是

退出狀態:-1這是什麼意思

感謝幫助。

+2

如何將您的代碼降至相關示例?有很多絨毛,我們不需要在那裏看到。 –

+0

您可以使用命令行'ssh user @ host user/psi/start_lm'執行相同的命令嗎? –

回答

1

有問題,我相信

". ./start_lm.sh 

應提供如下目前劇本在當前目錄

"./start_lm.sh 

爲退出狀態127

127 "command not found" illegal_command 
+0

與此o得到ksh:/start_lm.sh:未找到 退出狀態:1 – sm1988

+0

檢查我的編輯,是'start_lm.sh'出現在您的當前目錄?如果不提全路徑 – Rahul

+0

我編輯完整的路徑,但現在我得到退出狀態-1是否可以? thanx for ure reply – sm1988

0

字符串命令=「/ bin/sh /user/psi/start_lm.sh「;

請嘗試以上操作,因爲jsch可能會使用非交互式shell。