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 很奇怪所以也許我是遺漏了一些明顯的東西。
由於引號,
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 }