2014-11-11 2 views
1

Я пытаюсь выполнить оболочку bash, которая вызывает оболочку mongo с помощью команды, созданной динамически. Баш оболочка выглядит следующим образом:Передача переменных оболочки bash в команду оболочки mongo

#!/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 объекта.

При выполнении в качестве оболочки bash я получаю сообщение об ошибке «Неожиданный токен ILLEGAL». Если я выполню команду, эхом отозванную на экране, я получаю желаемые результаты.

Мой вопрос: есть ли способ передать в оболочку определенные переменные в оболочку mongo и, если есть, что мне нужно изменить, чтобы сделать это?

ответ

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 
Смежные вопросы