知道我能够运行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)?
不是你提到的方式。
大括号扩展发生在任何其他扩展之前。这意味着当您说 时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
您可以使用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;