1

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

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

这是我将一个 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 个命令?

4

1 回答 1

2

如果在远程机器上启动了一个普通的 shell,使用;or&&构造来做更多的事情。

如在

cd /home/foo/banana ; do_things

或者

cd /home/foo/banan && do_things #do_things will only be run if the cd command is successfull
于 2012-09-06T13:48:27.040 回答