Android应用中以前一个命令的上下文执行shell命令

3
我知道如何从Android应用程序中执行Shell命令。
shell.exec("ls /");

以及如何从中读取响应

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

但我有一个需要在运行后输入额外用户信息的shell应用程序。我想知道如何向同一个shell命令发送额外的输入。

例如:

cp /abc/ /a/abc/

假设命令需要用户通过输入额外的Y来确认覆盖,该怎么做?

2个回答

1
尝试使用此方法通过shell发送多个命令。这适用于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();   
             }

嗨,谢谢回复,但这些命令是立即逐个发送的。但我想要的是发送命令,比如cp,然后读取输出,一旦输出包含Do you want to rewrite file,我就发送响应Y,这样可行吗?我能够读取和分析响应,但无法发送响应以便它在问题的上下文中理解。如果我使用shell.exec("Y");会出错。(我知道你可以使用标志来覆盖所有内容,但我每次都必须询问用户)。 - user2570174
我认为你所询问的是不可能的,因为这些函数只能用于命令,而不能用于用户输入。 - krishna
好的,也许可以在后台运行隐藏的终端shell,并发送输入,就像用户在真实的shell中键入一样,这是否可能? - user2570174

0

尝试

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接