执行bash脚本并使用java中的空格传递参数

时间:2015-07-29 23:39:48

标签: java bash exec

我知道有很多关于从Java执行命令的帖子,但我不能让它工作。这是我尝试做的,我有一个bash脚本,它接收2个可能有或没有空格的参数,然后从Java我执行脚本并传递这样的参数(I&# 39; m用引号括起参数并用反斜杠转义它们:

String cmd = "/opt/myScript  \"/opt/myPath1\"  \"/opt/myPath2 with spaces\"";
Runtime rt = Runtime.getRuntime();
rt.exec(cmd);

我也尝试过这样的ProcessBuilder类:

String myScript = "/opt/myScript";
String myArg1= "/opt/myPath1";
String myArg2 = "/opt/myPath2 with spaces";
ProcessBuilder pb = new ProcessBuilder(myScript , myArg1, myArg2);
pb.start;

没有空格的参数被成功收到,但我仍然遇到第二个问题。

我认为ProcessBuilder类会处理这些空格但似乎我错过了一些东西。

我不确定它是否有事可做,但以防这是我的剧本:

#!/bin/bash
PATH=$PATH:$1
gnome-terminal --working-directory $2

$1$2是从Java发送的参数。

2 个答案:

答案 0 :(得分:0)

Runtime.exec()是一个重载方法。如何调用它有几种可能的方法。调用exec(String command)执行指定的字符串命令,但参数在此处用空格分隔。方法exec(String[] cmdarray)执行指定的命令和参数。还有其他exec()变体,但最适合您的是

String cmd[] = new String[] {"/opt/myScript", "/opt/myPath1", "/opt/myPath2 with spaces" };
Runtime rt = Runtime.getRuntime();
rt.exec(cmd);

可以使用ProcessBuilder也可以用于参数传递。我认为唯一的错误是在pb.start之后缺少括号。

最后但并非最不重要的是脚本有一个主要的错误。它不包含qu $2的quutes。它应该是

#!/bin/bash
PATH="$PATH:$1"
gnome-terminal --working-directory "$2"

答案 1 :(得分:0)

遇到同样的麻烦,最后解决:

  "multiCommand.commands": [

  {
      "command": "multiCommand.toggleTerminalAndFocusTerminal",

      "sequence": [
        "workbench.action.toggleMaximizedPanel",
        "workbench.action.terminal.focus",
      ]
    },

    {
      "command": "multiCommand.toggleTerminalAndFocusEditor",

      "sequence": [
        "workbench.action.toggleMaximizedPanel",
        "workbench.action.focusActiveEditorGroup",
      ]
    }
],