[英]Run linux Script from Java
我有以下java代码
ArrayList<String> argList = new ArrayList<>();
argList.add("Hello");
argList.add("World");
String[] args = argList.toArray(new String[argList.size()]);
Process p =Runtime.getRuntime().exec("echo '$1 $2' ", args);
结果是$1 $2
但我想打印Hello World
。 有谁能够帮助我?
创建一个外壳以使用参数扩展:
ArrayList<String> command = new ArrayList<>();
command.add("bash");
command.add("-c");
command.add("echo \"$0\" \"$1\"");
command.addAll(argList);
Process p = Runtime.getRuntime().exec(command.toArray(new String[1]));
输出:
Hello World
您应该使用exec(String[] args)
方法,而不是:
String[] cmdArgs = { "echo", "Hello", "World!" };
Process process = Runtime.getRuntime().exec(cmdArgs);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
问题在于, exec()
方法中的第一个参数不是脚本,而是脚本的名称。
如果要使用变量,例如$1
和$2
,则应在脚本中执行此操作。
因此,您实际上可能想要的是:
String[] cmdArgs = { "myscript", "Hello", "World!" };
Process process = Runtime.getRuntime().exec(cmdArgs);
ArrayList<String> argList = new ArrayList<>();
argList.add("echo");
argList.add("Hello");
argList.add("World");
Process p =Runtime.getRuntime().exec(args);
这样, String[]
将作为参数传递给echo
。
如果要使用$
则必须编写一个shell脚本。
Echo将这样打印所有参数。 在您的情况下,'$ 1 $ 2'被解释为普通字符串。.由于它将始终打印所有arg,因此您可以使用如下所示的内容。
ProcessBuilder pb= new ProcessBuilder().command("/bin/echo.exe", "hello", "world\n");
另一个选择是共同创建一个带有适当内容的小脚本,例如mycommands.sh
。
echo $@
echo $1 $2
#any such
然后,您调用脚本...
ProcessBuilder pb= new ProcessBuilder().command("/bin/bash" , "-c", "<path to script > ", "hello", "world\n");
注意使用ProcessBuilder。 这是一个改进的api,而不是Runtime。(尤其是引用等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.