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

标签 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 程序调用的脚本运行吗?

最佳答案

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

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

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

作为旁注 - OP 中的错误消息指出找不到 wget 命令。事实上,尝试通过 chmod 提供完整的读/写/执行权限不会产生任何效果,因为这些权限无助于提供命令的路径。

引用文献:

关于java - 从 Java 运行的 OSX 脚本中找不到 wget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50789587/

相关文章:

java - ObjectInputStream 总是检索一个空列表

java - 在不移动迭代器的情况下从链表返回值

linux - 指示脚本运行哪一部分的变量

string - 如何检查字符串是否包含 Bash 中的子字符串

linux - Sh - 获取下一个数组元素

linux - 编译选项基本./configure解释

wget - 使用 wget 下载所有 pdf 文件

java - 如何在分布式 vert.x EventBus 上使用 SSL?

macos - 使用 wget 从 github 下载整个文件夹

java - fragment 中的android MapView