【问题标题】:Run .sh File in Java Code on Linux Machine在 Linux 机器上以 Java 代码运行 .sh 文件
【发布时间】:2016-11-17 14:15:04
【问题描述】:

我的任务: 1 - 读取一个 Excel 文件,解析它并将数据保存在 txt 文件中。 2 - 读取该 txt 文件并将其传递给 batch.sh 文件。这个 batch.sh 文件做了一件事,它从上面提到的 txt 文件中挑选数据并将其保存在数据库的表中。

当我从终端运行 batch.sh 文件(并给它 txt 文件)时,它工作正常。它按照我的意愿在数据库中插入记录。

问题是,当我想对 java 代码做同样的事情时,batch.sh 文件不起作用。而且,不会抛出异常。

一些解释:我正在使用 Java 7、Oracle、SQL-Loader、Linux。

附加信息:如果我将batch.sh 文件重命名为batch.bat 文件并在Windows 环境中运行它,它工作得非常好。如果从终端执行,batch.sh 文件也可以正常工作。唯一的问题是,它不适用于 java 代码。

我列出了用于以下任务的 java 代码 sn-p、batch.sh 文件和 control.txt 文件。

Java 代码:

try{
    String target = new String("/path/to/batchFile/batch.sh");
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(target);
    proc.waitFor(); 
}catch(Exception e){
    LOG.error("Exception Occured with Message : "+e.getMessage());
}

Batch.sh:

sqlldr username/password@sid control='/path/to/batchFile/control.txt' log='/path/to/batchFile/Results.log' bad='/path/to/batchFile/BadFile.bad' ERRORS=5000

control.txt:

options  ( skip=1 )
load data
  infile               '/path/to/batchFile/TxtFileData.txt'           
  truncate into table   TABLE_NAME
fields terminated by ","       

  (  
  column_name "replace(:column_name,'-','')"    
  ) 

P.S:我已经阅读了很多关于同一问题的帖子,并尝试了所有解决方案,但都不起作用。当前的 java 代码示例取自另一个 StackOverFlow 线程。

我们将不胜感激。

【问题讨论】:

    标签: java linux shell sql-loader


    【解决方案1】:

    你会想要runtime.getRuntime.exec(new String[]{"/bin/bash", "-c", "/path/to/script.txt"}) 见这里:How to execute command with parameters?

    【讨论】:

    • 感谢您抽出时间回复。只是为了快速思考......你能告诉我3个字符串参数代表什么吗?
    • 第三个参数似乎是带有文件名的绝对路径...但是第一个和第二个参数呢?它们代表什么?
    • 我很抱歉。 /bin/bash 是shell解释器,之后的所有内容都是一个参数,所以它相当于运行 /bin/bash -c /path/to/your/script.txt 或其他什么,我们这样做的原因是因为当你在 shell 中时,sh 文件会被 bash 自动执行,而 java 的运行时执行服务则不会。所以你明确告诉它运行它。您实际上需要删除 -c ,这取决于上下文是什么,例如: /bin/bash -c ping -n google.com 很好,但实际脚本可能是 /bin/bash /path/to/ script.sh 和工作,我忘了。
    • 感谢 Zack 的时间和解释。该命令有效,但我发现运行 batch.sh 文件需要进行另一个调整。我没有在批处理文件的开头使用 '#!/bin/bash' 。将其标记为正确答案。
    • 我发布了另一个与 linux 相关的问题。如果您有时间,请查看并尽可能指导...stackoverflow.com/questions/40676310/…
    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2011-11-09
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多