我已经搜索了一段时间,每个人似乎都有不同的解决方案,似乎没有一个对我有效。
我已经尝试过ProcessBuilder和Runtime了。直接调用.sh文件并将其提供给/bin/bash。不走运。
回到基础,我当前的代码如下所示;
String cmd[] = { "~/path/to/shellscript.sh", "foo", "bar" };
Process p = Runtime.getRuntime().exec(cmd);它给出了一个No such file or directory错误,尽管手动运行;
~/path/to/shellscript.sh foo bar从bash中完美地工作。
我需要保留~,因为对于三个不同的用户,这个users脚本的形式略有不同。
发布于 2012-11-02 02:20:37
一种选择是自己处理~:
String homeDir = System.getenv("HOME");
String[] cmd = { homeDir + "/path/to/shellscript.sh", "foo", "bar" };
Process p = Runtime.getRuntime().exec(cmd);另一种方法是让Bash为您处理:
String[] cmd = { "bash", "-c", "~/path/to/shellscript.sh foo bar" };
Process p = Runtime.getRuntime().exec(cmd);发布于 2012-11-02 05:17:55
如前所述,代字号是特定于shell的扩展,应手动处理,方法是将其替换为当前用户的主目录(例如,如果已定义,则将其替换为$HOME )。
除了已经提供的解决方案之外,您还可以考虑使用Apache Commons项目中的commons-io和commons-exec:
...
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.Executor;
import org.apache.commons.io.FileUtils;
...
CommandLine cmd = new CommandLine("path/to/shellscript.sh");
cmd.addArgument("foo");
cmd.addArgument("bar");
Executor exec = new DefaultExecutor();
exec.setWorkingDirectory(FileUtils.getUserDirectory());
exec.execute(cmd);
...https://stackoverflow.com/questions/13183152
复制相似问题