Псевдоним не работает с моей командой mongo --eval
У меня есть следующая команда оболочки mongo, чтобы удалить всех пользователей, которые не являются администраторами
mongo --eval 'db.users.remove({group:{$ne:"admin"}})' collection
Это работает.
Я хочу создать псевдоним для этой команды, но следующие возможные варианты, которые я пробовал, дали мне соответствующие ошибки
alias mdelna="mongo --eval 'db.users.remove({group:{$ne:"admin"}})' collection"
SyntaxError: Unexpected token :
alias mdelna="mongo --eval 'db.users.remove({group:{
"
$ne
"
:"admin"}})' collection"
SyntaxError: Unexpected token :
alias mdelna="mongo --eval 'db.users.remove({group:{
"
$
"
ne:"admin"}})' collection"
ReferenceError: admin is not defined
alias mdelna="mongo --eval 'db.users.remove({group:{
"
$
"
ne:
'
admin
'
}})' collection"
ReferenceError: admin is not defined
alias mdelna="mongo --eval 'db.users.remove({group:{
"
$
"
ne:
admin
}})' collection"
ReferenceError: admin is not defined
alias mdelna="mongo --eval 'var admin="admin";db.users.remove({group:{
"
$
"
ne:
admin
}})' collection"
Это не дает никакой ошибки. Но это также ничего не делает. Я проверяю базу данных, и она не сделала свою работу.
Что я могу делать не так?
1 ответ
Это все о том, чтобы избежать чего-либо, чтобы полная команда правильно проходила через bash. В частности, $
будет проблемой, так как bash попытается заменить это переменной $ne
(которого не существует). Вот версия, которая работала для меня:
alias mdelna="mongo --eval 'db.users.remove({group:{\$ne:\"admin\"}})' collection"
Я не храню правила для различных специальных символов в своей голове, и довольно сложно вычленить правила из документов, поэтому быстрый и грязный способ проверить подобные вещи - это посмотреть, что эхо вернется, когда вы передадите его. тот же аргумент. Вот два для сравнения:
$ echo "mongo --eval 'db.users.remove({group:{$ne:\"admin\"}})' collection"
mongo --eval 'db.users.remove({group:{:"admin"}})' collection
Обратите внимание на отсутствие $ne
- он был заменен пустым содержимым несуществующей переменной на bash
, Теперь сбежать $
Посмотрите, исправит ли это:
$ echo "mongo --eval 'db.users.remove({group:{\$ne:\"admin\"}})' collection"
mongo --eval 'db.users.remove({group:{$ne:"admin"}})' collection
И теперь это гораздо больше похоже на то, к чему мы стремимся - вы можете видеть, как вы можете постепенно наращивать результаты на основе результатов, пока не получите то, что вам нужно.