java - 使用 Java 通过 ssh 运行 bash 命令

标签 java bash command-line ssh

我想从 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 的 chmod777

当我直接从 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/

相关文章:

python - 为什么我可以从命令行导入 Python 模块,但不能从脚本导入?

google-chrome - Chrome 命令行参数在 Windows 10 上不起作用

java - 凯撒移位密码,输入异常错误

Java 科学数据处理

bash - bash 与 awk 的接口(interface) :

linux - 解析参数的代码错误

command-line - OpenJDK 64 位 Java 1.6 : Doesn't support dot in CLI system properties?

java - 在 Tomcat 上处理 URI 中的字符编码

java - 从数组创建链接数据结构

linux - 如果可用大小超过阈值,从目录中递归删除最旧文件的 Bash 脚本