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

时间:2017-09-13 14:13:41

标签: 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();

但执行命令无法在控制台上打印以下错误:

/bin/sh: sshpass: command not found

如果我在Mac OS的终端中执行命令,命令运行完美。 (已经通过brew安装了sshpass)。

如何在java中执行命令?

2 个答案:

答案 0 :(得分:1)

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

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

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

$ which sshpass

答案 1 :(得分:1)

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

  • 如果不提供sshpass的绝对路径,则依靠shell在$PATH
  • 中找到它
  • 您明确启动 new shell,因为它是非交互式的 - 不会加载交互式shell所做的所有配置文件。如果/usr/local/bin添加到$PATH未放入适当的配置文件中,则不会执行。 shell手册页中提供了完整的详细信息。

通过给出绝对路径来绕过查找机制!