繁体   English   中英

Bash-将参数视为命令参数

[英]Bash - treat parameters as command parameters

我知道,我们可以使用-c参数在BASH中执行命令:

bash --login -c "command parameter"

由于我们需要能够以编程方式(来自Java)使用任意参数(可以包含空格,引号或撇号)执行任何命令 ,因此我们希望BASH将所有参数都视为命令,例如--通常用于分隔选项从文件名,例如使用Git。 有没有办法执行上述调用,类似于

bash --login -<some option> -- command parameter

可以在不转义命令或参数的情况下轻松地从Java执行哪些操作?

new ProcessBuilder(new String[] {
  "bash",
  "--login",
  "-<some option>",
  "--"
  command,
  parameter
}).start();

-c command必须是bash的最后一个选项参数。 随后的所有参数(无论它们是否以破折号开头)都被分配给执行命令的外壳程序中的位置参数$0$1 ,...。

这通常很方便,因为它使您可以将字符串替换为正在执行的命令,而不必担心引用它们。

由于命令后的第一个参数已分配给$0 ,因此通常会看到类似

bash -c 'complicated command using "$@"' _ arg1 arg2 arg3

因此arg1将被分配给$1 (例如,因此允许"$@"按预期工作)。

举个例子:

new ProcessBuilder( new String[] {
  "bash",
  "--login",
  "-<some option>",
  "-c",
  "for arg in \"$@\"; do frobnicate \"$arg\" 42; done",
  "_",
  "first thing to frobnicate",
  "second thing", ...
}).start();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM