我正在尝试运行我在linux上找到的一些Java代码。
maudecmd = new String[files.length+5];
maudecmd[0] = "maude";
maudecmd[1] = "-no-banner";
maudecmd[2] = "-no-ansi-color";
maudecmd[3] = "-no-mixfix";
maudecmd[4] = "-no-wrap";
for(int i = 0; i < files.length; ++i) {
maudecmd[5+i] = files[i];
}
ProcessBuilder pb = new ProcessBuilder(maudecmd);
if(dir != null)
pb.directory(dir);
pb.redirectErrorStream(true);
maude = pb.start();
抛出IOException - bash无法找到'maude'命令。
我在.bashrc文件中有别名:
alias maude='~/lib/maude/maude.linux'
如果我改变这样的代码:
maudecmd[0] = "/u/h/os215/lib/maude/maude.linux";
工作正常。
我想更改此代码以使其更强大 - 如果有人可以在命令行上运行Maude,则ProcessBuilder也应该能够使用它,无论用户必须使用哪种特定方法链接Maude。
这可以实现吗?
答案 0 :(得分:4)
.bashrc
别名仅影响BASH shell。您可以导出一个环境变量,但我不知道Java的ProcessBuilder是否会选择它。
话虽如此,我不明白为什么这不起作用:
maudecmd[0] = "/bin/bash maude";
答案 1 :(得分:2)
ProcessBuilder只能启动实际流程。这里maude
是一个bash别名,因此仅适用于bash。
您可以使用环境变量指向可执行文件夹而不是定义别名。或者只是将可执行路径作为应用程序的参数传递。