我编写了一个在我的 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/