我怎么能告诉Java代码运行脚本,因为它是从普通用户的命令行运行的?

时间:2013-07-17 13:52:42

标签: java linux bash google-chrome chromium

当我手动运行此脚本时,浏览器chrome会在一个选项卡中打开该网站(这完全符合我的需要)

但是当我使用Java示例代码运行相同的脚本10次时,它会打开浏览器,但是相同的页面10个TAB会打开10次。

Q值。我怎么能告诉Java代码请运行它,因为它假设是在运行手动执行(所以我只有1个TAB?)?

BASH: /var/tmp/runme.sh (运行1次,仍然按预期始终有1个选项卡)

export DISPLAY=:0.0
ps aux | grep chromium-browser | awk '{ print $2 }' | xargs kill -9;
sleep 8;
chromium-browser --process-per-site --no-discard-tabs --ash-disable-tab-scrubbing -disable-translate "http://www.oracle.com" &

Java: 启动该脚本的10倍

  system("/var/tmp/runme.sh &");

  public static String system(String cmds) {
    String value = "";
    try {
      String cmd[] = { "/bin/sh", "-c", cmds};
      Process p = Runtime.getRuntime().exec(cmd);
      p.waitFor();
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line = reader.readLine();
      while (line != null) {
        value += line + "\n\r";
        line = reader.readLine();
      }
    } 
    catch (IOException ioe) {
      ioe.printStackTrace();
    } 
    catch (InterruptedException ie) {
      ie.printStackTrace();
    }
    return value;
  }

2 个答案:

答案 0 :(得分:1)

从此行system("/var/tmp/runme.sh &");

中删除&

第二,也许从那以后,您正在使用它:“/ bin / sh”,每次使用Runtime调用时,Java都会将脚本作为不同的shell运行?

并且您每次都在同一个shell中执行 /var/tmp/runme.sh

注意:/ bin / sh是一个解释器,使用Java Runtime,你每次都要调用它的多个实例来执行你的脚本。

答案 1 :(得分:1)

Java有时会受到欢迎。它解决了。

  

1(在杀死java之前杀死chrome浏览器

     

2(杀死chrome浏览器后再启动java应用程序

     

3(现在标签为1,浏览器为1

之前:(错误)

export DISPLAY=:0.0
pkill java;
java -cp SystemV.jar Main.Start "boot chromium now with 1 tab and 1 browser" &
ps aux | grep chromium-browser | awk '{ print $2 }' | xargs kill -9;
chromium-browser --process-per-site --no-discard-tabs --ash-disable-tab-scrubbing -disable-translate "http://www.oracle.com" &

AFTER:

export DISPLAY=:0.0
ps aux | grep chromium-browser | awk '{ print $2 }' | xargs kill -9;
chromium-browser --process-per-site --no-discard-tabs --ash-disable-tab-scrubbing -disable-translate "http://www.oracle.com" &
pkill java;
java -cp SystemV.jar Main.Start "boot chromium now with 1 tab and 1 browser" &
echo "it works now"