Java中的sshpass给出错误:/bin/sh:sshpass:未找到命令
我尝试在java中执行一个简单的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(); 但命令执行失败,无法在控制台上打印以下错误:
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。这里有两件事:
- 通过不提供
的绝对路径,您可以依靠shell在sshpass
$path
- 显式启动一个新的shell,由于它是非交互式的,所以不会加载交互式shell所加载的所有配置文件。如果未将
添加到/usr/local/bin
中,则不会执行该操作。完整的详细信息可在shell手册页面中找到$PATH
通过给出绝对路径,您可以绕过查找机制 给出sshpass的完整路径。这就是诀窍!你真是个天才谢谢你的建议,我会考虑一个更好的机制。然而,使用/usr/local/bin/sshpass,它可以在Java中工作,对于我的范围来说已经足够了!绝对路径是最好的方法。我只是在解释为什么它对你不起作用。
$ which sshpass