2016-11-16 222 views
0

我已經使用NetBeans v.8.2創建了一個java GUI。 Java非常新。從Java運行一個shell腳本返回「找不到命令」

GUI中的一個按鈕使用從GUI中的其他按鈕/文本字段收集的參數啓動shell腳本(我知道這不是理想的Java練習,但它適用於我的用例):

``` 
     private void RunMacActionPerformed(java.awt.event.ActionEvent evt) {          
      String command[] = {scriptDirStr + "/./Master_run.sh", 
           projDirStr+"/", 
           DestDirStr+"/", 
           ECnonNormStr, 
           ECnormStr, 
           ProjID.getText(), 
           scriptDirStr +"/"}; 
      System.out.print(Arrays.toString(command)); 
      ProcessBuilder pb = new ProcessBuilder(command); 
      try { 
       Process p = pb.start(); 
      } catch (IOException ex) { 
       Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     }          
    ``` 

所以,這個想法是用一堆參數啓動Master_run.sh。 Master_run.sh運行其它R和Python腳本,例如:

python2 $script_Path/array_data_extractor.py $spath >>$spath/masterOutput.txt 2>>$spath/masterErrors.txt

Rscript $script_Path/1_APS_generator_master.R $spath $dpath $APS_src_filename $project_ID $APS_norm_src_filename >>$spath/masterOutput.txt 2>>$spath/masterErrors.txt

cat $spath/masterErrors.txt| mail -s $Project_title" done" [email protected]

結束我知道腳本被推出因爲我收到一封電子郵件,其中包含以下錯誤:

「...... 14行:python2:命令未找到」

「...... 16行:RSCRIPT:命令未找到」

當我運行Master_run.sh與來自終端內部的相同的確切參數,沒有這樣的錯誤。有人知道什麼可能會出錯和/或如何解決它?

爲了解釋這個問題,我得到了不同的行爲,從java內部啓動相同的命令,直接到命令行。

回答

1

您的shell環境與java環境明顯不同。嘗試指定python2和Rscript的完整路徑。例如

/usr/local/bin/python2 $script_Path/array_data_extractor.py ... 
+0

可以從腳本中獲取我的.bash_profile是否有竅門? – Atticus29

+0

指定完整路徑的竅門。謝謝! – Atticus29