运行 Linux 机器上的 Java 代码中的 .sh 文件
Run .sh File in Java Code on Linux Machine
我的任务:
1 - 读取一个 Excel 文件,解析它并将数据保存在 txt 文件中。
2 - 读取该 txt 文件并将其传递到 batch.sh 文件。这个 batch.sh 文件做一件事,它从上面提到的 txt 文件中提取数据并将其保存在数据库的 table.
中
当我从终端 运行 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代码:
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: 我已经阅读了很多关于同一问题的 post,并尝试了所有解决方案,但没有一个有效。 java 代码的当前示例取自另一个 Whosebug 线程。
任何帮助将不胜感激。
你想要runtime.getRuntime.exec(new String[]{"/bin/bash", "-c", "/path/to/script.txt"})
看这里:How to execute command with parameters?
我的任务: 1 - 读取一个 Excel 文件,解析它并将数据保存在 txt 文件中。 2 - 读取该 txt 文件并将其传递到 batch.sh 文件。这个 batch.sh 文件做一件事,它从上面提到的 txt 文件中提取数据并将其保存在数据库的 table.
中当我从终端 运行 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代码:
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: 我已经阅读了很多关于同一问题的 post,并尝试了所有解决方案,但没有一个有效。 java 代码的当前示例取自另一个 Whosebug 线程。
任何帮助将不胜感激。
你想要runtime.getRuntime.exec(new String[]{"/bin/bash", "-c", "/path/to/script.txt"})
看这里:How to execute command with parameters?