我编写了一个调用shell脚本的代码:
ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh");
Process script_exec = pb2.start();
pb2.redirectError();
代码适用于我,因为它执行脚本。
这个脚本需要两个参数1:输入文件2:seqs,格式如下:
sample1.sh -ip=abc.txt --seqs=20
Shell脚本是交互式的,它要求许多参数,所以我已经改变了它的代码,我将这些值作为争论传递给它。所以完整的格式应该是:
db = abc outformat = 1 threads = 10 sample1.sh --ip = abc.txt --seqs = 20
那么如何使用java执行此脚本?有没有其他方法可以使用java调用交互式脚本?
答案 0 :(得分:1)
我建议使用Apache Commons Exec,它有助于在多平台环境中运行外部进程。
以下是教程:http://commons.apache.org/proper/commons-exec/tutorial.html
答案 1 :(得分:1)
只需传递ProcessBuilder构造函数中的参数即可。像这样:
ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh", "-ip=abc.txt", "--seqs=20");
您还可以使用List<字符串>代替。
答案 2 :(得分:1)
你可以试试这个:
ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh --ip=abc.txt --seqs=20");
Process script_exec = pb2.start();
OutputStream in = script_exec.getOutputStream();
in.write("abc".getBytes());
in.write("1".getBytes());
in.write("10".getBytes());
in.flush();
in.close();
此代码将abc,1和10写入处理输入。