使用java中的参数执行shell脚本

lyn*_*nks 9 java bash runtime

我一直在谷歌搜索,每个人似乎有一个不同的解决方案,似乎没有一个对我有用.

我曾经尝试都ProcessBuilderRuntime.两者都.sh直接调用文件并将其提供给/bin/bash.没有运气.

回到基础,我目前的代码如下;

String cmd[] = { "~/path/to/shellscript.sh", "foo", "bar" };
Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)

No such file or directory即使手动运行,也会出错;

~/path/to/shellscript.sh foo bar
Run Code Online (Sandbox Code Playgroud)

从bash完美运作.

我需要保留,~因为这个shellcript以三种不同用户的略有不同的形式存在.

rua*_*akh 13

一种选择是~自己处理:

String homeDir = System.getenv("HOME");
String[] cmd = { homeDir + "/path/to/shellscript.sh", "foo", "bar" };
Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)

另一个是让Bash为你处理它:

String[] cmd = { "bash", "-c", "~/path/to/shellscript.sh foo bar" };
Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)

  • @lynks:是的.Tilde扩展是Bash的一个特性 - 参见*Bash参考手册*中的[§3.5.2"Tilde扩展"](http://www.gnu.org/software/bash/manual/bashref.html#Tilde-扩展) - 而不是Java所知道的任何事情.(而不是系统知道的任何事情.) (2认同)