我正在使用我理解的 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
它是否应该附加-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 很奇怪,所以也许我是遗漏了一些明显的东西。
由于引号,
docker-compose
将up -d
其视为单个命令,而不是up
选项-d
。大概它的解析然后替换-
为_
,但无论如何为时已晚。删除引号和不必要的
echo
并更改state
为数组(因为它可以包含多个参数)可以解决问题: