変数、引用符、一重引用符を含むリモートSSHコマンド

変数、引用符、一重引用符を含むリモートSSHコマンド

シェルスクリプトで宣言された変数を使用して、リモートMongoDBサーバーでコマンドを実行する必要があります。

注文する:

ssh [email protected] "mongo mydb --host 10.1.1.1 --port 27017 -u user -p password --authenticationDatabase admin --eval 'db.mycollection.update({}, {$push: {'"$ENTITY"': NumberInt('"$CODE"')}})' --quiet"

シェルスクリプトの外部でコマンドを使用して変数を置き換えると、bash -c構文エラーが発生します。例:

ssh [email protected] "mongo mydb --host 10.1.1.1 --port 27017 -u user -p password --authenticationDatabase admin --eval 'db.mycollection.update({}, {$push: {foo: NumberInt(123)}})' --quiet"

bash: -c: line 0: syntax error near unexpected token `('

今働きます!解決策:

DBUPDATE="db.mycollection.update({}, {\$push: {${ENTITY}: NumberInt(${CODE})}})"

ssh [email protected] mongo mydb --host 10.1.1.1 --port 27017 -u user -p password --authenticationDatabase admin --eval "'$DBUPDATE'" --quiet

ベストアンサー1

ssh [email protected] 'mongo mydb --host 10.1.1.1 --port 27017 -u user -p password --authenticationDatabase admin --eval "db.mycollection.update({}, {$push: {'"$ENTITY"': NumberInt('"$CODE"')}})" --quiet'

始めと終わりで二重引用符を一重引用符に置き換え、--eval入力内容を二重引用符で囲みました。

おすすめ記事