使用变量进行Bash和mongodb脚本评估

时间:2014-09-23 13:31:21

标签: javascript linux bash mongodb shell

我试图使用mongodb shell脚本和bash的组合创建一个添加用户函数,它看起来像这样: (击)

function addUser {
    read -p "email(username): " email
    read -p "name: " name
    read -p "password: " password
    read -p "role (customer/merchant): " role
    salt=$(node node/getSalt)
    passHash=$(node node/getHash salt password)
    export as="var email='$email', hashedPassword='$passHash', role='$role', name='$name', salt='$salt';"
    echo $as
    mongo --nodb --quiet --eval $as adduser.js
}

adduser.js现在只是一个空脚本我需要将变量放到这个脚本中。:

email(username): regre
name: reger
password: ergher
role (customer/merchant): reg
var email='regre', hashedPassword='Vql40+ypE8cVoDw5jPEs0s+YbycG+pzjPVBRMIROJ/+XqiDHc7UD0aZeKY2/enKdSC3V8qMwmLJNc3D67VPHVQ==', role='reg', name='reger', salt='9QgI52o2zgIH8RORVeg1Eg==';
Tue Sep 23 00:39:03.210 SyntaxError: Unexpected end of input

脚本回显$的值,看起来是正确的,但是mongodb shell脚本似乎无法评估这个表达式。

如何成功将此表达式从bash传递到mongodb shell脚本进行评估?


当我像这样调用mongo shell脚本时,我没有错误:

mongo --nodb --quiet --eval "var email='regre', hashedPassword='Vql40+ypE8cVoDw5jPEs0s+YbycG+pzjPVBRMIROJ/+XqiDHc7UD0aZeKY2/enKdSC3V8qMwmLJNc3D67VPHVQ==', role='reg', name='reger', salt='9QgI52o2zgIH8RORVeg1Eg==';" adduser.js

2 个答案:

答案 0 :(得分:0)

不确定这是否是问题,但总是很好地在脚本上传递mongo的完整路径。

在命令行上:

which mongo

将脚本上的单词mongo替换为mongo命令

上收到的完整路径

答案 1 :(得分:0)

错误在这里 - 你没有给mongo引擎提供任何javascript代码进行评估! --eval之后的值应该是有效的JavaScript代码。但是你只是提供了一些纯文本。

正确的命令是:

mongo --nodb --quiet --eval "db.addUser(userAdditionDocument)"

userAdditionDocument将是:

{ user: "<name>",
  pwd: "<cleartext password>",
  customData: { <any information> },
  roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
  ],
  writeConcern: { <write concern> }
}

您可能已经知道,只需将整个userAdditionDocument复制粘贴到上面的命令中,代码就可以正常工作。

此完整信息可供here