首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java中的参数执行shell-script

使用java中的参数执行shell-script
EN

Stack Overflow用户
提问于 2012-11-02 02:17:05
回答 2查看 30.4K关注 0票数 10

我已经搜索了一段时间,每个人似乎都有不同的解决方案,似乎没有一个对我有效。

我已经尝试过ProcessBuilderRuntime了。直接调用.sh文件并将其提供给/bin/bash。不走运。

回到基础,我当前的代码如下所示;

代码语言:javascript
复制
String cmd[] = { "~/path/to/shellscript.sh", "foo", "bar" };
Process p = Runtime.getRuntime().exec(cmd);

它给出了一个No such file or directory错误,尽管手动运行;

代码语言:javascript
复制
~/path/to/shellscript.sh foo bar

从bash中完美地工作。

我需要保留~,因为对于三个不同的用户,这个users脚本的形式略有不同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-02 02:20:37

一种选择是自己处理~

代码语言:javascript
复制
String homeDir = System.getenv("HOME");
String[] cmd = { homeDir + "/path/to/shellscript.sh", "foo", "bar" };
Process p = Runtime.getRuntime().exec(cmd);

另一种方法是让Bash为您处理:

代码语言:javascript
复制
String[] cmd = { "bash", "-c", "~/path/to/shellscript.sh foo bar" };
Process p = Runtime.getRuntime().exec(cmd);
票数 14
EN

Stack Overflow用户

发布于 2012-11-02 05:17:55

如前所述,代字号是特定于shell的扩展,应手动处理,方法是将其替换为当前用户的主目录(例如,如果已定义,则将其替换为$HOME )。

除了已经提供的解决方案之外,您还可以考虑使用Apache Commons项目中的commons-iocommons-exec

代码语言:javascript
复制
...
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);
...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13183152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档