【问题标题】:Running Bash Script in Java在 Java 中运行 Bash 脚本
【发布时间】:2012-08-10 22:25:04
【问题描述】:

所以本质上,我正在尝试运行命令“/dir/command -arg”来更改 Java 中 USB 设备上的 LED 颜色。我正在使用 Ubuntu 10.04。当我从终端运行命令时,它工作得很好。

但是,我尝试了我能找到的 Runtime.exec() 的每一次迭代,但它们似乎都不起作用。然后我创建了一个包含以下内容的脚本:

#!/bin/bash
echo "hello"
/dir/command -arg

当我从终端运行它时,它工作得很好。但是,当我运行

@Override
public void run() {
    String[] lookupCmd = {"/bin/sh","-c", "sh /dir/script.sh"};
    try {
      Runtime runtime = Runtime.getRuntime();
      Process lookupProc = runtime.exec(lookupCmd);
      lookupProc.waitFor();
      BufferedReader reader = new BufferedReader(new InputStreamReader(lookupProc.getInputStream()));
      String line = reader.readLine();        
      while (line != null) {
        id.add(line);
        System.out.println(line);
        line = reader.readLine();
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }

"hello" 打印,但仅此而已。没有错误。

我的其他命令不应产生任何输出,而只是更改 LED 的颜色。但是,当我使用相同的命令但产生输出的不同 arg 运行它时,它仍然只打印“hello”。

我还确保我的用户有权使用 USB 设备访问 /dev 文件夹。

【问题讨论】:

  • 您如何确保您的用户对 USB 设备的 /dev 文件夹具有权限??
  • 所以最初我得到“libusb 无法打开 USB 设备 /dev/bus/usb/002/003:权限被拒绝。”所以我去了“/dev/bus/usb”并使用 chown 将该文件夹中所有内容的所有者更改为我的用户。如果我在 Java 中使用“gnome-terminal”,就会出现这个用户。
  • 当你没有实现error stream时,你怎么能说没有没有错误
  • 看看here
  • @user145181 如果您成功了,请继续添加您所做的答案(以便人们可以看到您所做的),然后接受它。

标签: java ubuntu terminal usb


【解决方案1】:

我没有运行错误流,所以我添加了它。

之后我意识到我缺少一个环境变量,所以补充说:

String[] envar = {"VAR=path"}

并调用:

runtime.exec(lookupCmd, envar);

现在很好用。

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多