2015-11-16 89 views
2

瞭解我能夠運行echomv來擴展如下所示的模式:echo {0..9}{A..Z}。我很想知道是否有辦法做到這一點,但運行命令?模式擴展以運行命令

docker-compose {stop,rm,up -d} 

上面的示例不起作用,但有一些方法可以實現(分別運行stop,rm和up)?

回答

2

您可以使用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; 
+0

您也可以引用而不是轉義 – 123

5

不是你提到它的方式。

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 
+1

注意,報價僅適用於'「向上-d」'否則這將是兩個詞需要。 –

+2

還要注意''$ parameter''幾乎可以肯定是錯誤的*因爲docker會收到一個'up -d'參數......只是擺脫引號。 –

+0

@KarolyHorvath不知道'docker-compose'up -d「'和'docker組成up -d'是否有區別。 – fedorqui