0

我希望有人能给我一些建议。我正在用 java 运行一个程序,需要包含一个已经用 bash 编写的函数。老实说,我不确定从哪里开始。

我有一些文件,我用我的 java 程序处理了一些文件(我取出重复项、排序名称等)。我最终得到了其他文件的几个路径。

for(String go:parsun){
    pathed="/home/S/Data/"+go+"/Ana/lysis/"+go+"/file.vcf";
    System.out.println("Pathed: " + pathed);
 }

我需要采用这些路径并将它们放入一个 bash 程序中,该程序获取文件的内容并对它们的内部进行一些数学运算。我在互联网上看到你可以做这样的事情来在 java 中运行一个 bash 脚本:

Process pro=Runtime.getRuntime().exec("shellfilepath");
BufferedReader read=new BufferedReader(new InputStreamReader(pro.getInputStream());

但我不确定我是否理解它是如何工作的,或者我将如何将我的文件路径传递给它。此外,另一个考虑因素是我必须稍微修改 bash 脚本以允许它采用这些路径。以前,路径是事先硬编码的。在这方面我还需要一些建议。

这是让 bash 和 Java 一起工作的最佳方式吗?还有其他技术吗?如果没有,有人可以帮助我了解如何使用运行时吗?

谢谢

4

4 回答 4

2

你可以使用:

Process process = Runtime.getRuntime().exec("bash_command " + pathed);

pathed文件名将作为参数传入$1

于 2012-09-13T17:23:49.667 回答
1

以下看起来像是从 java 运行 shell 脚本的一个很好的介绍:http: //obscuredclarity.blogspot.com/2011/07/executing-shell-script-from-java.html

它展示了如何修改您的 shell 脚本以接受参数,以及如何使用Runtime.exec()来调用脚本并将参数传递给它。

另请参阅Runtime该类的 API:http: //docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

于 2012-09-13T17:47:13.520 回答
0

Runtime.exec(String)是一种很好的方法,但是您需要注意脚本的路径是否包含空格。更好的方法是使用Runtime.exec(String[]). 这将确保 Java 将您的脚本路径视为一个命令参数,而不是尝试将其拆分为空格。

Process process = Runtime.exec(new String[] {shellFilePath});

另外,请确保包含#!/bin/bash在脚本的顶部。

于 2012-09-13T17:24:52.097 回答
0

你有两个选择:

  1. 从 Java 中的 bash 脚本重写逻辑。这将执行得更快且不那么脆弱,但是如果 bash 脚本庞大而复杂,或者没有人能够理解的遗留代码,那么它可能比您想要做的工作更多。
  2. ProcessBuilder使用;执行 bash 脚本 您可以将命令行参数传递给它。这带来了一系列与两个进程之间的协调有关的问题。如果 bash 脚本不期望任何输入,事情会简单一些,但通常您需要启动脚本,在不同的线程上运行输入和输出处理程序,然后等待终止。如果你从来没有做过,这有点难以做到,尽管网络上有很好的例子。
于 2012-09-13T17:25:43.160 回答