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-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 -dup-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
}

관련 정보