java - 无法从 Shell 包含 sshpass 的 Java 调用 shell 脚本

标签 java shell unix weblogic12c

我们有一个用例,用于将 > 4GB 数据文件从 sftp 站点传输到服务器盒。我们决定创建一个 java 服务,它将调用一个 shell 脚本,让实习生进入 sftp 站点和路径并将文件传输到目标目的地。

我们编写了以下代码来从 Java 文件调用 shell 脚本。

Process proc = null;
String command = "/mnt/hmdata/loadTest.sh";
System.out.println("passing command::" + command);
try {
    Runtime rt = Runtime.getRuntime();
    proc = rt.exec(command.trim());
    boolean status = proc.waitFor `enter code here` (45, TimeUnit.SECONDS);
    LOGGER.log(Level.INFO, "Shell Called successfully");
    if (status) {
        msg = "Shell Called successfully";

    } else {
        msg = "Error while calling Shell";
    }
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (NullPointerException e) { 
    e.printStackTrace(); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} finally { 
    proc.destroy(); 
}

shell脚本是这样的

sshpass -p '<password>' scp -r <userid>@<host>:/finint/inbound/financial/tenv/edw_osccl/* .

一旦我调用我的 java 服务,我们的服务就无法启动 shell。相反,相同的 shell 在服务器命令提示符下工作正常。我们正在 Unix 上运行我们的程序。

有人可以建议解决方案吗?

最佳答案

已解决。 Java 代码没有变化。

   Changed Shell Script as
   echo "Hello" >> /mnt/hmdata/output.txt
   chmod 777 /mnt/hmdata/output.txt
   export PASSWD="password"

   sshpass -f /mnt/hmdata/password scp -v -r <user><host>:<path>/<file>

关于java - 无法从 Shell 包含 sshpass 的 Java 调用 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57144127/

相关文章:

java - 使用 AsyncTask 作为内部类

linux - 查找所有世界可读的目录

.net - 在我按照 OWAPS 和 Roslyn Security Guard 的建议应用解决方案后,Veracode 仍然报告操作系统命令注入(inject)问题

python - 如何使用 python 或 perl 通过 ssh 在另一个 shell 中发送命令

c - 我怎样才能找出哪个图书馆是给定对象的所在地?

linux - 在 POSIX 环境中如何分配大于 0 字节的文件而不写入内容?

java - 使用 PDFTextStream 从 PDF 文件中提取僧伽罗语字符

java - 如何将三种具有不同参数类型的相似方法合并为一个通用方法?

c++ - 在 linux 中创建 "virtual"OpenGL 上下文

java - 如何从 Ivy 下载的 JAR 中运行 FindBugs