在Linux机器上以Java代码运行.sh文件

在Linux机器上以Java代码运行.sh文件,java,linux,shell,sql-loader,Java,Linux,Shell,Sql Loader,我的任务: 1-读取Excel文件,对其进行解析,并将数据保存在txt文件中。 2-读取该txt文件并将其传递到batch.sh文件。这个batch.sh文件做一件事,它从上面提到的txt文件中提取数据并将其保存在数据库的表中 当我从终端运行batch.sh文件(并给它一个txt文件)时,它工作正常。它会按照我的要求在数据库中插入记录 问题是,当我想对java代码执行相同操作时,batch.sh文件不起作用。而且,不会引发任何异常 一些解释:我正在使用Java 7、Oracle、SQL Load

我的任务: 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代码片段、batch.sh文件和control.txt文件

Java代码:

Batch.sh:

control.txt:

p.S:我已经阅读了许多关于同一问题的帖子,并尝试了每一种解决方案,但都没有效果。当前的java代码示例取自另一个StackOverFlow线程


非常感谢您的帮助。

您需要
runtime.getRuntime.exec(新字符串[]{/bin/bash'、“-c”、“/path/to/script.txt”})

请参见此处:

感谢您抽出时间回复。只是想简单想想。。。你能告诉我3个字符串参数代表什么吗?第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,我忘记了。谢谢您的时间和解释。该命令起作用了,但我发现运行batch.sh文件还需要另一个调整。我没有用“#”/批处理文件开头的bin/bash。我已经发布了另一个关于linux的问题。如果你有时间,请看一看,如果可能的话,请给我一些指导。。。
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());
}
sqlldr username/password@sid control='/path/to/batchFile/control.txt' log='/path/to/batchFile/Results.log' bad='/path/to/batchFile/BadFile.bad' ERRORS=5000
options  ( skip=1 )
load data
  infile               '/path/to/batchFile/TxtFileData.txt'           
  truncate into table   TABLE_NAME
fields terminated by ","       

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