JSch一次执行多个linux命令

时间:2012-09-06 09:46:08

标签: java linux jsch

我的目标是使用java应用程序连接到我的linux服务器并执行linux命令。我已经使用JSch API实现了这一点,但我似乎无法弄清楚如何一次执行多个命令。

这对我来说是一个问题,因为我需要导航到某个目录,然后执行另一个命令FROM该目录。我的应用程序只在第二个命令可以在正确的目录中执行之前退出。

这是我的方法,当它作为参数传递并打印任何输出时,将一个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个命令?

1 个答案:

答案 0 :(得分: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