知道我能够运行echo
或mv
来扩展这些模式:echo {0..9}{A..Z}
。我很想知道是否有办法做同样的事情但是要运行命令?
docker-compose {stop,rm,up -d}
上面的示例不起作用,但有一些方法可以实现(分别运行stop,rm和up)?
答案 0 :(得分: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
为此,您可能想要使用循环(注意" up -d"被引用以便将其视为单个参数):
for argument in stop rm "up -d"
do
docker-compose $argument
done
答案 1 :(得分: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;