[英]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.