如何使用Java运行时在SSH中运行多个命令?
命令: ssh user@127.0.0.1'export MYVAR = this/dir/is/cool;/run/my/script/myscript; echo $ MYVAR'
@Test
public void testSSHcmd() throws Exception
{
StringBuilder cmd = new StringBuilder();
cmd.append("ssh ");
cmd.append("user@127.0.0.1 ");
cmd.append("'export ");
cmd.append("MYVAR=this/dir/is/cool; ");
cmd.append("/run/my/script/myScript; ");
cmd.append("echo $MYVAR'");
Process p = Runtime.getRuntime().exec(cmd.toString());
}
Run Code Online (Sandbox Code Playgroud)
它自己的命令可以工作,但是当试图从java运行时执行时它不会.有什么建议或意见吗?
使用较新的ProcessBuilder类而不是Runtime.exec.您可以通过指定程序及其参数列表来构造一个,如下面的代码所示.您不需要在命令周围使用单引号.您还应该阅读stdout和stderr流以及waitFor完成的过程.
ProcessBuilder pb = new ProcessBuilder("ssh",
"user@127.0.0.1",
"export MYVAR=this/dir/is/cool; /run/my/script/myScript; echo $MYVAR");
pb.redirectErrorStream(); //redirect stderr to stdout
Process process = pb.start();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while((line = reader.readLine())!= null) {
System.out.println(line);
}
process.waitFor();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12358 次 |
| 最近记录: |