我正在尝试在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中也执行该命令?
发布于 2017-09-13 22:29:05
感谢@Thorbjørn Ravn Andersen,这是正确的命令(适用于Mac):
String command = "/usr/local/bin/sshpass -p password ssh user@host 'echo test' ";执行以下命令可以找到正确的路径:
$ which sshpass发布于 2017-09-13 23:21:03
这实际上是Unix的事情,而不是Java。这里有两件事:
通过不给出$PATH
sshpass中找到它的shell显式地启动一个新的shell,因为它是非交互式的,它不会加载交互式shell所加载的所有配置文件。如果没有将/usr/local/bin添加到$PATH中,则不会执行该操作。有关详细信息,请参阅shell手册页。通过提供绝对路径,您可以绕过查找机制!
https://stackoverflow.com/questions/46199865
复制相似问题