0

mongo スニペットを評価する「ラッパー」bash エイリアス関数を作成しようとしています

alias mongoshelleval=mongoshelleval
mongoshelleval(){
    mongo --verbose --eval $1 $db
    }

そして、スニペットをenv変数として保存しています

export delsessions='"db.sessions.drop()"'

私は物事を実行します

mongoshelleval $delsessions

しかし、それは操作を実行しません。それだけ

$ mongoshelleval $delsessions
MongoDB シェル バージョン: 2.4.8
Thu Aug 07 03:50:18.809 versionArrayTest が
接続先に渡されました: db
Thu Aug 07 03:50:18.861 への新しい接続の作成:127.0.0.1:27017
Thu Aug 07 03:50: 18.867 BackgroundJob 開始: ConnectBG
Thu Aug 07 03:50:18.870 接続接続!
db.sessions.drop()
Thu Aug 07 03:50:18.880 収集されていない 1 つのクラス mongo::DBClientWithCommands オブジェクトを解放する

エラーをスローすることなく。引数を出力するだけですdb.sessions.drop()

そして、セッションはまだそこにあります

$ mongoshell
MongoDB シェル バージョン: 2.4.8
接続先: db
db.sessions.find()
{ "_id" : "yr5rxguSbb32Q880Jj36Rq2_uU
{ "_id" : "9PQh_ml5Gloiaunv6pbgVevM_6
{ "_id" : "OacGUyf-V1DcTQIg3lMgFXUL-N
: "_id" "GC7gh09iqVUny9HM8gnGl9Hzxt
{"_id":"_f4koE0tagJ7vwuU76BatcDeEb {"_id
":"t1CX_eqi7FcCREfBB2X5CpgOcz

意図したとおりに動作しないのはなぜですか? また、クエリを実行していないのにエラーが発生しないのはなぜですか?

4

1 に答える 1

0

余分な引用符があります。試す

export delsessions="db.sessions.drop()"

たとえば、次のように動作します

mongo> db.sessions.find()
{ "_id" : ObjectId("53e5078d5b8b40be16223165"), "a" : 1 }
mongo> exit
bye

bash$ export test="db.sessions.drop()"
bash$ mongo --eval $test
MongoDB shell version: 2.6.3
connecting to: test
true
bash$ mongo

mongo> db.sessions.find()
// nothing

明確にするために、> および $ プロンプトを mongo シェルと bash シェルのどちらで使用しているかを追加しました。

于 2014-08-08T17:25:46.427 に答える