【问题标题】:Passing bash shell variables into a mongo shell command将 bash shell 变量传递给 mongo shell 命令
【发布时间】:2015-01-08 14:47:48
【问题描述】:

我正在尝试执行一个 bash shell,它使用动态创建的命令调用 mongo shell。 bash shell 如下所示:

#!/bin/bash

TODAY=`date '+%Y-%m-%d'`

CMD=" 'printjson(db.collection.aggregate([{$match:{processedtime:{$gte:\"$TODAY"}}},{$project:{_id:$field",count:{$sum:1}}}]))'"

echo "CMD: $CMD"

mongo host/mdb --eval $CMD

请注意,集合中的 processestime 字段是格式化为 ISODate 对象的字符串值。

当作为 bash shell 执行时,我收到“Unexpected token ILLEGAL”错误。如果我执行回显到屏幕的命令,我会得到想要的结果。

我的问题是,有没有办法将 shell 定义的变量传递到 mongo shell 中,如果有什么我需要更改才能做到这一点?

【问题讨论】:

    标签: bash mongodb


    【解决方案1】:

    你已经注意到足够的转义了,我相信你不想要文字单引号:

    CMD="printjson(db.collection.aggregate([{\$match:{processedtime:{\$gte:\"$TODAY\"}}},{\$project:{_id:\$field",count:{\$sum:1}}}]))"
    # ...^.. single quote unneeded ..........^.......................^.....^.......&......^..............^...............^............^
    mongo host/mdb --eval "$CMD"
    # ....................^....^  crucial double quotes here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      相关资源
      最近更新 更多