如何在 docker exec 命令中使用带有字符串 (

如何在 docker exec 命令中使用带有字符串 (

这是我正在尝试做的事情:

    docker exec -it $1 /bin/bash <<< $CONTAINER_ID

但这不起作用:

输出:“docker exec”需要至少 2 个参数。

似乎 <<< 完全取代了 STDIN,忽略了 $1。是否可以仅用 <<< 替换一个参数?我知道别名,但它不适合我。我需要能够仅使用标准工具向我的同事传递一条命令,在该命令中他将仅更改最后一个变量,该变量将替换命令中心的一个或多个参数。

答案1

<<<是这项工作的错误工具。它取代了与传递参数无关的标准输入 (stdin)。参数和标准输入都是命令输入的形式,但它们彼此完全独立。xargs可以将 stdin 转换为参数,但此时您实际上是在尝试解决该问题,而不是使用一开始就不存在此问题的方法。

我不确定我理解这里的实际目标和约束是什么,但我认为定义一个函数可能是完成你想要的事情的最干净的方法:

execit() {
    docker exec -it "$1" /bin/bash
}

(替换execit为您喜欢的任何函数名称。)然后只需运行 例如execit "$CONTAINER_ID"

如果这不适合您想要做的事情,下一个最干净的解决方案是 Kamil Maciorowski 在评论中建议的:

sh -c 'exec docker exec -it "$1" /bin/bash' sh "$CONTAINER_ID"

答案2

感谢卡米尔·马乔罗夫斯基(Kamil Maciorowski),我找到了寻找的方向并找到了解决方案。这是执行我需要的命令:

xargs -o -I{} docker exec -it {} /bin/bash <<< $CONTAINER_ID

相关内容