2012-09-06 201 views
1

我的目標是使用java應用程序連接到我的linux服務器並執行linux命令。我已經使用JSch API實現了這一點,但我似乎無法弄清楚如何一次執行多個命令。JSch一次執行多個linux命令

這對我來說是一個問題,因爲我需要導航到某個目錄,然後從該目錄執行另一個命令。我的應用程序在第二個命令可以在正確的目錄中執行之前退出。

這是我的方法來執行一個Linux命令作爲一個字符串,當它作爲參數傳遞和打印任何輸出。

public void connect(String command1){ 

try { 
     JSch jsch = new JSch(); 

     Session session = jsch.getSession(user, host, port); 
     session.setPassword(password); 
     session.setConfig("StrictHostKeyChecking", "no"); 
     session.connect(); 
     System.out.println("Connected"); 

     Channel channel = session.openChannel("exec"); 
     ((ChannelExec)channel).setCommand(command1); 
     channel.setInputStream(null); 
     ((ChannelExec)channel).setErrStream(System.err); 

     InputStream in = channel.getInputStream(); 
     channel.connect(); 
     byte[] tmp = new byte[1024]; 
     while(true){ 
      while(in.available()>0){ 
      int i=in.read(tmp, 0, 1024); 
      if(i<0)break; 
      System.out.print(new String(tmp, 0, i)); 
      } 
      if(channel.isClosed()){ 
      System.out.println("exit-status: "+channel.getExitStatus()); 
      break; 
      } 
      try { 
       Thread.sleep(1000); 
      } 
      catch(Exception ee){ 
       ee.printStackTrace(); 
      } 
     } 

     channel.disconnect(); 
     session.disconnect(); 
     System.out.println("DONE"); 

    } 
catch(Exception e){ 
     e.printStackTrace(); 
    } 

} 

任何想法如何一次執行2個命令?

回答

2

如果在遠程計算機上啓動了一個正常的shell,請使用;&&構造來完成更多操作。

cd /home/foo/banana ; do_things 

cd /home/foo/banan && do_things #do_things will only be run if the cd command is successfull