2013-11-25 36 views
3

執行shell我知道如何在外殼從Android應用程序執行命令Android在前面的命令的情況下,從應用

shell.exec("ls /"); 

以及如何從中讀取

new BufferedReader(new InputStreamReader(_process.getInputStream())).readLine(); 

響應,但我有一個shell運行後需要額外用戶輸入的應用程序。我想知道如何發送額外的輸入到相同的shell命令。

例如:

cp /abc/ /a/abc/ 

而且可以說,該命令要求用戶通過輸入查詢額外Y確認覆蓋,該怎麼做?

回答

0

嘗試

Process process = Runtime.getRuntime().exec(commandLine); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
1

嘗試使用此方法發送多個命令通過shell.This致力於通過JSCH客戶端SSH

Channel channel=session.openChannel("shell"); 
      OutputStream ops = channel.getOutputStream(); 
      PrintStream ps = new PrintStream(ops, true); 

      channel.connect(); 
      ps.println("mkdir folder"); 
      ps.println("dir"); 
    //give commands to be executed inside println.and can have any no of commands sent. 
          ps.close(); 

      InputStream in=channel.getInputStream(); 
      byte[] bt=new byte[1024]; 


      while(true) 
      { 

      while(in.available()>0) 
      { 
      int i=in.read(bt, 0, 1024); 
      if(i<0) 
       break; 
       String str=new String(bt, 0, i); 
       //displays the output of the command executed. 
       System.out.print(str); 


      } 
      if(channel.isClosed()) 
      { 

       break; 
      } 
      Thread.sleep(1000); 
      channel.disconnect(); 
      session.disconnect(); 
      } 
+0

嗨。感謝您的重播,但是這些命令會立即被一一發送。但我想要的是發送命令,比如'cp',然後讀取輸出,一旦輸出包含'你想重寫文件嗎?我發送響應'Y',這是可能的,我能夠讀取和分析響應,但我不能發送響應,以便在問題提供的背景下理解它,如果我使用'shell.exec(「Y」);'它會給出錯誤。 (我知道你可以使用標誌覆蓋所有,但我必須每次詢問用戶)。 – user2570174

+0

我認爲你所要求的是不可能的,因爲這些功能只能用於命令而不能用於用戶輸入。 – krishna

+0

好吧,也許有可能運行隱藏在後臺的終端外殼,併發送輸入,就好像用戶在真實shell中鍵入它一樣,這可能嗎? – user2570174

相關問題