从Java运行一个shell脚本返回“找不到命令”

问题描述:

我已经使用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内部启动相同的命令,直接到命令行。

您的shell环境与java环境明显不同。尝试指定python2和Rscript的完整路径。例如

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

可以从脚本中获取我的.bash_profile是否有窍门? – Atticus29

+0

指定完整路径的窍门。谢谢! – Atticus29