我想从 java 运行一个带有 ssh 的脚本。该脚本采用一个数字作为参数。我启动此代码:
String myKey="/home/my_key.pem";
Runtime runtime = Runtime.getRuntime();
String commande = "ssh -i "
+myKey+" ubuntu@ec2-56-75-88-183.eu-west-1.compute.amazonaws.com './runScript.bash 8000'";
Process p = runtime.exec(commande);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
p.waitFor();
我收到此错误:
bash: ./runScript.bash 8000: No such file or directory
文件名正确。赋予 runScript.bash 的 chmod
是 777
。
当我直接从 bash 运行命令行时,它可以工作。但从 IDE 来看,却不然。
我该如何正确运行此命令行?
最佳答案
错误清楚地表明:
bash: ./runScript.bash 8000: No such file or directory
这表明 shell 正在尝试调用名为 ./runScript.bash 8000
的脚本 - 脚本文件名中包含空格和 8000。
我很少告诉任何人少用引号,但是,这实际上是一个可以解决问题的案例。
最好完全避免双重评估:
Runtime.exec(new String[] {
"ssh",
"-i", myKey,
"ubuntu@ec2-56-75-88-183.eu-west-1.compute.amazonaws.com",
"./runScript 8000"
})
关于java - 使用 Java 通过 ssh 运行 bash 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22203957/