
Recientemente me encontré con el siguiente comando de la ventana acoplable, que es muy largo:
docker run -it -v $PWD/config:/opt/ibm/datapower/drouter/config -v $PWD/local:/opt/ibm/datapower/drouter/local -v $PWD/certs:/opt/ibm/datapower/root/secure/certs -e DATAPOWER_ACCEPT_LICENSE=true -e DATAPOWER_INTERACTIVE=true -p 9090:9090 -p 9022:22 -p 5554:5554 -p 8000-8010:8000-8010 --name idg ibmcom/datapower
¿Hay alguna manera de acortarlo reduciendo la repetición?
Por ejemplo, hay múltiples -v
argumentos que podrían expresarse como los siguientes:
for each string in ['config', 'local', 'certs']:
-v $PWD/$$string:/opt/ibm/datapower/drouter/$$string
¿Existe alguna forma compacta de hacer esto en bash o zsh (de forma similar a la expansión del shell, sin escribir otra línea)?
Respuesta1
¿Intentas esto?
docker run -it $(for d in config local certs; do echo -n "-v $PWD/$d:/opt/ibm/datapower/drouter/$d "; done) -e DATAPOWER_ACCEPT_LICENSE=true -e DATAPOWER_INTERACTIVE=true -p 9090:9090 -p 9022:22 -p 5554:5554 -p 8000-8010:8000-8010 --name idg ibmcom/datapower
Respuesta2
Esto debería funcionar en zsh
:
docker run -it \
$(printf -- "-v $PWD/%1\$s:/opt/ibm/datapower/drouter/%1\$s " config local certs)\
-e DATAPOWER_ACCEPT_LICENSE=true -e DATAPOWER_INTERACTIVE=true \
-p 9090:9090 -p 9022:22 -p 5554:5554 -p 8000-8010:8000-8010 \
--name idg ibmcom/datapower
%$1s
Esto utiliza la indexación de argumentos POSIX printf
para incluir el mismo parámetro varias veces en la salida (config, local, certs en su ejemplo). Aparentemente bash
no es compatible con esto (todavía).
Las continuaciones de línea ( \
) son sólo para hacerlo un poco más legible; todavía se puede copiar y pegar con una sola acción.