这是我正在尝试做的事情:
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