docker-compose 的 ZSH 宏替代 - _

docker-compose 的 ZSH 宏替代 - _

我正在使用 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
}

相关内容