我正在使用 zsh,据我所知,它与 bash 不同,但大部分相似。我决定为我的 docker-compose 命令创建一个宏:
dock-comp() {
state="$2"
if [ "$state" = "up" ]; then
state='up -d'
fi
# For debugging
echo "docker-compose -p $1 -f my/path/to/file.yml "$(echo "$state")""
# The actual command that runs
docker-compose -p $1 -f my/path/to/file.yml "$(echo "$state")"
}
因此,如果我运行dock-comp CONTAINER down
它,效果很好,但我会遇到dock-comp CONTAINER up
.您可以看到我输入的内容是否up
应该附加 the -d
,并且回显打印确认这成为我想要的,但随后该命令给出以下输出:
> dock-comp CONTAINER up
docker-compose -p CONTAINER -f my/path/to/file.yml up -d
No such command: up _d
Commands:
build Build or rebuild services
(etc)
这是最近的帖子我可以找到我的问题,但我认为它没有那么相关,因为我没有使用相同的参数,而且我的回声证明了这一点应该被正确处理,但 bash 很奇怪,所以也许我遗漏了一些明显的东西。
答案1
由于引号的存在,docker-compose
它被up -d
视为单个命令,而不是up
选项-d
。大概它的解析然后替换-
为_
,但无论如何都太晚了。
删除引号和不必要的内容echo
并更改state
为数组(因为它可以包含多个参数)可以修复以下问题:
dock-comp() {
state=($2)
if [[ $state[1] == up ]]; then
state+=(-d)
fi
docker-compose -p "$1" -f my/path/to/file.yml $state
}