【发布时间】:2017-07-13 19:18:18
【问题描述】:
我正在尝试在远程机器上运行一些命令并使用 Java 捕获结果。我有一个名为 test.sh 的 shell 脚本,它有以下命令:
sshpass -p 'password' ssh root@host.com echo hostname
我正在使用下面的 java 代码运行它:
public void runCommand() throws IOException, InterruptedException {
ProcessBuilder builder = new ProcessBuilder();
boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");
if (isWindows) {
builder.command("cmd.exe", "/c", "dir");
} else {
builder.command("sh", "-c", "sh test.sh");
}
builder.directory(new File(System.getProperty("user.home")));
Process process;
BufferedReader reader = null;
try {
process = builder.start();
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
String output = stringBuilder.toString();
System.out.println(output);
} finally
{
if (reader != null)
try {
reader.close();
} catch (IOException e) {
}
}
}
命令执行,但我没有在输出中得到任何东西。如果我使用像 echo、hostname 这样的简单命令,那么我可以在输出中得到结果。我知道JSch可以解决这个问题,但是我不能用。
【问题讨论】:
-
也许 yiu 遇到了一些异常并且不记录它们?
-
@telex 如果我从终端运行,脚本运行没有任何问题
-
它没有回答我的问题。
-
如何查看是否有异常?
-
现在您完全忽略命令的错误输出。您可以使用
ProcessBuilder.redirectErrorStream获取有关错误的更多详细信息。可能sshpass未安装,或者安装但未在$PATH中为您的java 进程。