从Java运行的OSX脚本找不到wget

时间:2018-06-11 01:48:20

标签: java sh wget

我编写了一个在我的Mac上运行脚本的Java程序:

     Runtime rt = Runtime.getRuntime();
     String cmdString = "./load_test.sh";

     System.out.println(cmdString);
     Process pr = rt.exec(cmdString);

     BufferedReader input = new BufferedReader(new InputStreamReader(
                                               pr.getErrorStream()));

     String line = null;
     while ((line = input.readLine()) != null)
     {
        System.out.println(line);
     }

     int exitVal = pr.waitFor(); 

load_test脚本执行此操作:

wget -O/dev/null --load-cookies cookies-$1.txt 'http://demo.mycompany.co.uk/userhome'

即使我在Mac上从许多不同的位置运行load_test.sh,这个Java程序的输出是:

  

./ pcm_load_test.sh:line 2:wget:command not found

因此,似乎从Java中生成时,无法从脚本调用wget?

我认为这可能是用户访问问题,所以我尝试了:

 sudo chmod a+rwx /usr/local/bin/wget

但这没有效果。

为什么wget不会从Java程序调用的脚本运行的任何想法?

1 个答案:

答案 0 :(得分:1)

正如Elliott Frisch所述,并基于我自己通过应用程序在多个操作系统上运行脚本的经验:

通过java代码执行脚本时,必须确保可以找到您尝试执行的命令。这通常需要使用以下两个选项之一:

  • 使用全局环境路径变量 - 以编程方式运行脚本时,代码会打开shell实例并执行脚本。新的shell实例没有预先配置的全局环境路径变量,这意味着您应该将此配置添加到脚本的开头: export PATH=${PATH}:/path/to/your/used/bin
  • 使用命令的绝对路径 - 只需在脚本中使用完整路径显式调用命令:/usr/local/bin/wget ........

作为旁注 - OP中的错误消息指出无法找到wget命令。实际上,通过chmod提供完整的读/写/执行权限的尝试将无效,因为权限无助于提供命令的路径。

参考文献: