我的目标是使用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个命令?
答案 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