无法运行程序“...”错误= 2,没有这样的文件或目录(java)

问题描述:

我想要制作一个Java程序,将为我在我的MacBook上建立一个SSH连接。它提示我输入用户名,然后输入IP地址,然后输入“ssh username @ ip”。无法运行程序“...”错误= 2,没有这样的文件或目录(java)

下面是我的代码:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Scanner; 

public class SSH { 
    public static void main(String[] args) throws Exception { 
    boolean rep = true; 
    String username = (null); 
    String IPAdress = (null); 
    while (rep) { 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Username: "); 
     username = scanner.next(); 
     System.out.print("\nIP Adress: "); 
     IPAdress = scanner.next(); 
     System.out.println("\n\nIs this correct?\nUsername: " + username + "\nIP Adress: " + IPAdress + "\nY/N"); 
     char responce = scanner.next().charAt(0); 

     if (responce == 'Y' || responce == 'y') { 
      rep = false; 
      scanner.close(); 
     } else if (responce == 'N' || responce == 'n') { 

     } else { 
      Error displayErrorMessage = new Error(); 
      displayErrorMessage.displayError(); 
     } 
    } 
    String SSHStartup = username + "@" + IPAdress; 
    System.out.println("Running command: ssh " + SSHStartup); 
    String[] command = { "/bin/bash, -c , ssh " + SSHStartup }; 
    Process p = Runtime.getRuntime().exec(command); 
    p.waitFor(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line = ""; 
    StringBuffer output = new StringBuffer(); 
    while ((line = reader.readLine()) != null) { 
     output.append(line + "\n"); 
    } 
} 
} 

我知道,它的杂乱,现在好缩进,但不是执行命令,它给了我这样的:

Exception in thread "main" java.io.IOException: Cannot run program "/bin/bash, -c , ssh [email protected](ip here)": error=2, No such file or directory 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 
at java.lang.Runtime.exec(Runtime.java:620) 
at java.lang.Runtime.exec(Runtime.java:485) 
at SSH.main(SSH.java:32) 
Caused by: java.io.IOException: error=2, No such file or directory 
at java.lang.UNIXProcess.forkAndExec(Native Method) 
at java.lang.UNIXProcess.<init>(UNIXProcess.java:248) 
at java.lang.ProcessImpl.start(ProcessImpl.java:134) 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
... 3 more 

为目的这篇文章中,我已经删除了IP地址,但是当我编译并运行它时,我尝试了实际的一个,它给了我同样的错误。

帮助?

+0

什么'ls -l命令/斌/ bash'回报? – Tunaki

+0

@Tunaki,它返回-r-xr-xr-x 1个根轮628496 Dec 2 22:36/bin/bash – Spud

+0

https://bugs.eclipse.org/bugs/show_bug.cgi?id=509628,有Eclipse长期以来的错误。我可以通过在程序本身提及adb的完整路径来获得此解决方案。 String [] temp = {“/ Users/vikram-anna/Library/Android/sdk/platform-tools/adb”,“start-server”}; \t \t p = Runtime.getRuntime()。exec(temp); – vikramvi

String[] command = { "/bin/bash, -c , ssh " + SSHStartup }; 
Process p = Runtime.getRuntime().exec(command); 

command数组包含一个值,即字符串 “/斌/庆典,-c,SSH ...”。 Java正在尝试并且无法执行具有该名称的文件。

你可能是为了构建包含command命令及其作为字符串的字符序列参数,而不是一个字符串:

String[] command = { "/bin/bash", "-c", "ssh " + SSHStartup }; 
+0

你会建议我做什么?我应该使用“/ bin/bash”,“-c”,“ssh”+ SSHStartup命令创建一个文件吗? – Spud

+0

你在我的答案中看到最后一行吗?第二个代码块?这就是你应该做的。 – Kenster

+0

对不起,我不知道两对“”可能导致我一个多小时的挫折。感谢您解决我的问题! :) – Spud