
나는 최근에 너무 긴 다음 docker 명령을 발견했습니다.
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
반복을 줄여서 단축할 수 있는 방법이 있나요?
-v
예를 들어, 다음과 같이 표현될 수 있는 여러 인수가 있습니다 .
for each string in ['config', 'local', 'certs']:
-v $PWD/$$string:/opt/ibm/datapower/drouter/$$string
bash나 zsh에서 이를 수행할 수 있는 간단한 방법이 있습니까(다른 줄을 작성하지 않고 쉘 확장과 유사한 방식으로)?
답변1
이것을 시도해 보십시오:
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
답변2
이 기능은 다음에서 작동합니다 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
이는 POSIX %$1s
인수 인덱싱을 사용하여 printf
동일한 매개변수를 출력(예제에서는 config, local, certs)에 여러 번 포함합니다. 분명히 bash
이것을 (아직) 지원하지 않습니다.
연속된 줄( \
)은 단지 좀 더 읽기 쉽게 하기 위한 것입니다. 단일 작업으로 계속 복사하여 붙여넣을 수 있습니다.