如何在bash中使用&;将多个命令传递给单个命令&;?

如何在bash中使用&;将多个命令传递给单个命令&;?,bash,Bash,目前,我有一个脚本,它执行一些额外的处理,但最终会调用用户传递的命令(仅供参考,这是在docker容器中运行一些命令,但我们将其称为foo.sh): 这非常有效(例如,foo.sh echo HI),直到用户希望传递多个要运行的命令: e、 g.:foo.sh echo HI和echo BYE &&当然是由环境shell在传递到参数之前进行解释的 是否有一种解决方法或转义方法可能奏效?这种情况下常用的习惯用法: cmds_q='true' add_command() { local new_

目前,我有一个脚本,它执行一些额外的处理,但最终会调用用户传递的命令(仅供参考,这是在docker容器中运行一些命令,但我们将其称为
foo.sh
):

这非常有效(例如,
foo.sh echo HI
),直到用户希望传递多个要运行的命令:

e、 g.:
foo.sh echo HI和echo BYE

&&
当然是由环境shell在传递到参数之前进行解释的


是否有一种解决方法或转义方法可能奏效?

这种情况下常用的习惯用法:

cmds_q='true'
add_command() {
  local new_cmd
  printf -v new_cmd '%q ' "$@"
  cmds_q+=" && $new_cmd"
}

add_command echo HI
add_command echo BYE
runner bash -c "$cmds_q"

这里最大的优点是,只要调用方从不直接修改
cmds_q

运行程序bash-c,就可以使用任意参数调用
add_命令
(当然是在第一个定义要运行的命令之后),而不会将这些参数解析为语法/用于注入攻击“回音Hy& & Co再见”<代码>…否则,你正在编写一个全新的命令语言。我之前已经做过的,这是一个很好的灵感来源,在你的问题预想的那种场景中被优雅地使用。(要明确的是,
execline
不是我的,但我在构建相关工具集时用它作为思考的食粮)尽管如此,它是一个功能,而不是一个bug。如果
“$@”
可以扩展到作为语法解析的内容,那么在bash中传递不受信任的数据实际上是不可能的。
cmds_q='true'
add_command() {
  local new_cmd
  printf -v new_cmd '%q ' "$@"
  cmds_q+=" && $new_cmd"
}

add_command echo HI
add_command echo BYE
runner bash -c "$cmds_q"