如何使用java.lang.process运行多个Linux命令?

时间:2014-07-02 18:42:58

标签: java process

我有一个如下所示的例子。命令

iscsiadm -m discovery -t st -p iscsiInfo.ipAddress

将在此处执行,如果我想在执行此命令后执行额外命令,如

,该怎么办?

ls /var/lib/iscsi/nodes

如何使用java.lang.process?

添加,我只需要执行第一个命令,但我需要获得第二个命令结果并在GUI中显示它。

public static void main(String args[]) {
    try {
       String line;
       Process p = Runtime.getRuntime().exec("iscsiadm -m discovery -t st -p iscsiInfo.ipAddress");
       BufferedReader bri = new BufferedReader
        (new InputStreamReader(p.getInputStream()));
       BufferedReader bre = new BufferedReader
        (new InputStreamReader(p.getErrorStream()));
       while ((line = bri.readLine()) != null) {
         System.out.println(line);
       }
       bri.close();
       while ((line = bre.readLine()) != null) {
         System.out.println(line);
       }
       bre.close();
       p.waitFor();
       System.out.println("Done.");
     }
     catch (Exception err) {
       err.printStackTrace();
     }
}

1 个答案:

答案 0 :(得分:3)

您可以运行运行多个命令的shell。

e.g。

Runtime.getRuntime().exec("sh", "-c", 
          "iscsiadm -m discovery -t st -p iscsiInfo.ipAddress &&"
          +" ls /var/lib/iscsi/nodes");

如果您使用ProcessBuilder,您可以将错误重定向到标准输出并有一个流来读取。