了解我能够运行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)?
您可以使用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;
不是你提到它的方式。
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
注意,报价仅适用于'“向上-d”'否则这将是两个词需要。 –
还要注意''$ parameter''几乎可以肯定是错误的*因为docker会收到一个'up -d'参数......只是摆脱引号。 –
@KarolyHorvath不知道'docker-compose'up -d“'和'docker组成up -d'是否有区别。 – fedorqui
您也可以引用而不是转义 – 123