我正在尝试通过java程序执行unix命令。其中一些命令涉及if-then-fi语句。这可以通过java / Runtime类完成吗?好像它一次只处理1个命令。 我想做这样的事情:
grep 'Error One' SystemErr.log > $HOME/tempFiles/output.txt
grep 'Error Two' SystemErr.log >> $HOME/tempFiles/output.txt
grep 'Error Three' SystemErr.log >> $HOME/tempFiles/output.txt
.
.
if [ -s $HOME/tempFiles/output.txt ]
then
mail -s "Subject here" "a@b.com" < $HOME/tempFiles/output.txt
fi
基本上,如果grep发现任何内容,我只想通过电子邮件发送文件(结果)。 我想使用java而不是直接shell脚本,以便我搜索的错误可以由数据库驱动,更容易更改。
我知道我可以自己在java中读取文件并自己搜索/解析它。但grep和其他unix命令有很多内置功能,我想用它来简化它。
任何想法,还是我完全走错了路?
答案 0 :(得分:1)
这是一些代码,使用更简单的命令,但基本相同:
public static void main( String[] args ) throws Exception {
try {
ProcessBuilder pb = new ProcessBuilder( "/bin/bash", "-c",
"echo one >/tmp/xxx && echo two >>/tmp/xxx && " +
"if [ -s /tmp/xxx ]; then cp /tmp/xxx /tmp/yyy; fi" );
File log = new File( "/tmp/log.txt" );
pb.redirectOutput(ProcessBuilder.Redirect.appendTo(log));
Process process = pb.start();
process.waitFor();
} catch( Exception e ){
// ...
} catch( Error e ){
// ...
}
}
诀窍是将它全部放入一个shell命令中,以便您可以使用-c命令选项调用/ bin / bash。
如果编写此命令太复杂,请编写一个shell文件并将其作为源代码。