
最近、非常に長い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
これはサポートされていないようです (まだ)。
行継続 ( \
) は、読みやすくするためのものであり、1 回の操作でコピーして貼り付けることができます。