我知道有很多关于从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发送的参数。
答案 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",
]
}
],