2

知道我能够运行echomv扩展如下模式:echo {0..9}{A..Z}. 我很想知道是否有办法做同样的事情,但要运行命令?

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

上面的例子不起作用,但是有一些方法可以实现(分别运行 stop、rm 和 up)?

4

2 回答 2

5

不是你提到的方式。

大括号扩展发生在任何其他扩展之前。这意味着当您说 时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
于 2015-11-16T10:50:44.890 回答
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;
于 2015-11-16T11:00:14.343 回答