二重引用符内の bash 特殊文字をエスケープします。

二重引用符内の bash 特殊文字をエスケープします。

チュートリアルで次のコマンドを実行しようとしています。

docker run --rm -v $(pwd):/check --network des mongo:4.2 bash -c \
"mongorestore -hmongo -u moAdmin -p <PWD> --gzip --archive=/check/test.gz  --nsInclude='test.*' --drop"

問題は、パスワードに含まれているということです!と|使用された二重引用符内でこれを正しくエスケープする方法がわかりません。

ご協力ありがとうございます!

答え1

履歴拡張を一時的にオフにできます。

set +H
docker run --rm -v $(pwd):/check --network des mongo:4.2 bash -c \
"mongorestore -hmongo -u moAdmin -p <PWD> --gzip --archive=/check/test.gz  --nsInclude='test.*' --drop"
set -H

または、役割を直接エスケープすることもできます。

docker run --rm -v $(pwd):/check --network des mongo:4.2 bash -c \
"mongorestore -hmongo -u moAdmin -p P@assword\! --gzip --archive=/check/test.gz  --nsInclude='test.*' --drop"

変数に保存できます。

password='P@ssword!'
docker run --rm -v $(pwd):/check --network des mongo:4.2 bash -c \
"mongorestore -hmongo -u moAdmin -p \"$password\" --gzip --archive=/check/test.gz  --nsInclude='test.*' --drop"

関連情報