【发布时间】:2019-10-22 07:05:48
【问题描述】:
我正在尝试运行一个命令以从远程地址内的文件中读取字符串(并且我确定该文件在那里),当我在 bash 上运行该命令时该命令有效,但在以下情况下无效我在我的 java 代码中运行它。
Runtime rt = Runtime.getRuntime();
String[] command;
String line;
try {
command = new String[] {"sh", "-c", "\"sshpass " + "-p " + password + " ssh " + user + "@" + ip + " 'cat " + file.getAbsolutePath() + "'\"" };
Process mountProcess = rt.exec(command);
mountProcess.waitFor();
bufferedReader = new BufferedReader(new InputStreamReader(mountProcess.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
user_list.put(user, line);
}
bufferedReader.close();
bufferedReader = new BufferedReader(new InputStreamReader(mountProcess.getErrorStream()));
while ((line = bufferedReader.readLine()) != null) {
LOGGER.debug("Stderr: " + line);
}
bufferedReader.close();
} catch ...
我的 user_list 中没有添加任何行(因此来自 getInputStream 的行为空)并且我从代码中的记录器中收到以下错误:
Stderr: sh: 1: sshpass: not found
如果我在 bash 上使用完全相同的命令,它可以工作并打印我需要的字符串。
sshpass -p password ssh remote@192.168.1.10 'cat /home/ID/ID'
有人知道为什么会这样吗?谢谢!
【问题讨论】:
-
给出
sshpass的完整路径 -
考虑格式化命令rgagnon.com/javadetails/java-0463.html的字符串
-
我尝试使用完整路径“/usr/local/bin/sshpass”而不是“sshpass”,但我仍然有同样的错误
标签: java bash shell sh sshpass