【发布时间】:2021-08-09 18:42:12
【问题描述】:
- 我正在尝试使用 Java 在 MacOS 上进行一些自动化操作。
- 从终端手动运行命令时没有问题
- 我认为它可以工作是因为
<user.home>/.zprofile - 尝试通过 ProcessBuilder 执行命令时找不到命令
如何在与手动运行 zsh 终端相同的环境下执行命令?
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws Exception {
// these commands work
run("/bin/sh", "-c", "echo $PATH");
run("/bin/bash", "-c", "echo $PATH");
run("/bin/zsh", "-c", "echo $PATH");
// these commands all work when I run them manually in a terminal
// but fail here with "zsh:1: command not found: ..."
run("/bin/zsh", "-c", "node -v");
run("/bin/zsh", "-c", "npm -v");
}
private static void run(String... command) throws Exception {
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.redirectErrorStream(true);
processBuilder.command(command);
Process process = processBuilder.start();
try(BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
for(String line = br.readLine(); line != null; line = br.readLine()) {
System.out.println(line);
}
}
System.out.println("return value: " + process.waitFor());
}
}
输出:
/usr/bin:/bin:/usr/sbin:/sbin
return value: 0
/usr/bin:/bin:/usr/sbin:/sbin
return value: 0
/usr/bin:/bin:/usr/sbin:/sbin
return value: 0
zsh:1: command not found: node
return value: 127
zsh:1: command not found: npm
return value: 127
【问题讨论】:
-
您可以查看此stackoverflow.com/a/318252/8462076 或指定二进制文件的完整路径(
which node用于获取node完整路径)。但是 IMO 你真的应该考虑第一个选项 ;)
标签: java macos shell homebrew processbuilder