我试图使用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
答案 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。