2015-11-16 57 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