2012-08-14 102 views
0

所以基本上,我試圖運行命令「/ dir/command -arg」來更改Java中的USB設備上的LED顏色。我正在使用Ubuntu 10.04。當我從終端運行命令時,它工作得很好。在Java中運行Bash腳本

但是,我嘗試了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); 
    } 
    } 

「你好」打印,但沒有別的。沒有錯誤。

我的其他命令不應該產生任何輸出,而只需改變LED的顏色。但是,當我用相同的命令運行它,但是產生輸出的另一個arg時,它仍然只打印「hello」。

我也確保我的用戶有權限使用USB設備的/ dev文件夾。

+1

您如何確保您的用戶對usb設備具有/ dev文件夾的權限? – 2012-08-14 15:20:07

+0

所以最初我得到「libusb無法打開USB設備/ dev/bus/usb/002/003:權限被拒絕。」所以我去了「/ dev/bus/usb」並使用chown將該文件夾中的所有者更改爲我的用戶。這是如果我在Java中使用「gnome-terminal」時出現的用戶。 – user145181 2012-08-14 15:22:12

+0

你怎麼說有**沒有錯誤**當你沒有實現'錯誤流' – 2012-08-14 15:28:19

回答

0

我沒有運行錯誤流,所以我補充說。

之後,我才意識到我失去了一個環境變量,所以補充說:

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

,並呼籲:

runtime.exec(lookupCmd, envar); 

現在的偉大工程。