瞭解我能夠運行echo
或mv
來擴展如下所示的模式:echo {0..9}{A..Z}
。我很想知道是否有辦法做到這一點,但運行命令?模式擴展以運行命令
docker-compose {stop,rm,up -d}
上面的示例不起作用,但有一些方法可以實現(分別運行stop,rm和up)?
瞭解我能夠運行echo
或mv
來擴展如下所示的模式:echo {0..9}{A..Z}
。我很想知道是否有辦法做到這一點,但運行命令?模式擴展以運行命令
docker-compose {stop,rm,up -d}
上面的示例不起作用,但有一些方法可以實現(分別運行stop,rm和up)?
您可以使用eval
:
eval docker-compose\ {stop,rm,'up -d'}\;
雖然需要仔細轉義/報價。只是echo
,而不是docker
它發出正確的命令進行測試:
$ echo docker-compose\ {stop,rm,'up -d'}\;
docker-compose stop; docker-compose rm; docker-compose up -d;
不是你提到它的方式。
Brace expansion發生在任何其他擴展之前。這意味着當你說echo {0,1}{a,b}
時,Bash在進行任何其他步驟之前擴展大括號。這樣,它變成了echo 0a 0b 1a 1b
,單個命令。
當您提到docker-compose {stop,rm,up -d}
時,請注意這可能會擴展爲單個命令:docker-compose stop rm up -d
,這似乎不是有效的。
它看起來像你想運行三個不同的命令:
docker-compose stop
docker-compose rm
docker-compose up -d
對於這一點,所以它的治療可能要使用一個循環(注意「向上-d」引述一個參數):
for argument in stop rm "up -d"
do
docker-compose $argument
done
注意,報價僅適用於'「向上-d」'否則這將是兩個詞需要。 –
還要注意''$ parameter''幾乎可以肯定是錯誤的*因爲docker會收到一個'up -d'參數......只是擺脫引號。 –
@KarolyHorvath不知道'docker-compose'up -d「'和'docker組成up -d'是否有區別。 – fedorqui
您也可以引用而不是轉義 – 123