Zsh

用於 docker-compose 替代品的 ZSH 宏 - 用於 _

  • January 12, 2022

我正在使用我理解的 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-composeup -d其視為單個命令,而不是up選項-d。大概它的解析然後替換-_,但無論如何為時已晚。

刪除引號和不必要的echostate更​​改為數組(因為它可以包含多個參數)可以解決問題:

dock-comp() {
  state=($2)
  if [[ $state[1] == up ]]; then
     state+=(-d)
  fi
  docker-compose -p "$1" -f my/path/to/file.yml $state
}

引用自:https://unix.stackexchange.com/questions/686011