带变量、引号和单引号的远程 ssh 命令

带变量、引号和单引号的远程 ssh 命令

我需要使用 shell 脚本中声明的变量在远程 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"

请注意,如果我在 shell 脚本之外使用命令并替换变量,则会出现 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输入放在双引号中。

相关内容