我正在尝试执行一个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
请注意,集合中的processedtime字段是格式化为ISODate对象的sting值。
当作为bash shell执行时,我收到“意外的令牌ILLEGAL”错误。如果我执行回显到屏幕的命令,我会得到所需的结果。
我的问题是,有没有办法将shell定义的变量传递到mongo shell中,如果有什么需要更改来执行此操作?
答案 0 :(得分:2)
你注意逃避了,我相信你不想要文字单引号:
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