Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的sshpass给出错误:/bin/sh:sshpass:未找到命令_Java_Shell - Fatal编程技术网

Java中的sshpass给出错误:/bin/sh:sshpass:未找到命令

Java中的sshpass给出错误:/bin/sh:sshpass:未找到命令,java,shell,Java,Shell,我尝试在java中执行一个简单的sshpass命令: String command = "sshpass -p password ssh user@host 'echo test' "; ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", command); pb.inheritIO(); Process process = pb.start(); process.waitFor(); 但命令执行失败,无法在控制台上打印以下错误:

我尝试在java中执行一个简单的sshpass命令:

String command = "sshpass -p password ssh user@host 'echo test' ";

ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", command);
pb.inheritIO();
Process process = pb.start();
process.waitFor();
但命令执行失败,无法在控制台上打印以下错误:

/bin/sh: sshpass: command not found
如果我在Mac OS的终端上执行该命令,则该命令运行正常。(已通过brew安装sshpass)


如何在java中执行该命令?

感谢@Thorbjørn Ravn Andersen,这是正确的命令(适用于Mac):

执行以下命令可以找到正确的路径:

$ which sshpass

这实际上是一个Unix的东西,而不是Java。这里有两件事:

  • 通过不提供
    sshpass
    的绝对路径,您可以依靠shell在
    $path
  • 显式启动一个新的shell,由于它是非交互式的,所以不会加载交互式shell所加载的所有配置文件。如果未将
    /usr/local/bin
    添加到
    $PATH
    中,则不会执行该操作。完整的详细信息可在shell手册页面中找到

通过给出绝对路径,您可以绕过查找机制

给出sshpass的完整路径。这就是诀窍!你真是个天才谢谢你的建议,我会考虑一个更好的机制。然而,使用/usr/local/bin/sshpass,它可以在Java中工作,对于我的范围来说已经足够了!绝对路径是最好的方法。我只是在解释为什么它对你不起作用。
$ which sshpass