gpt4 book ai didi

java - Bash - 将参数视为命令参数

转载 作者:行者123 更新时间:2023-11-30 02:14:03 26 4
gpt4 key购买 nike

我知道,我们可以使用 -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 的最后一个选项参数。任何后续参数,无论是否以破折号开头,都会被分配给执行命令的 shell 中的位置参数 $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();

关于java - Bash - 将参数视为命令参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49167352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com