Псевдоним не работает с моей командой 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 definedalias mdelna="mongo --eval 'db.users.remove({group:{"$"ne:'admin'}})' collection"ReferenceError: admin is not definedalias mdelna="mongo --eval 'db.users.remove({group:{"$"ne:admin}})' collection"ReferenceError: admin is not definedalias 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
И теперь это гораздо больше похоже на то, к чему мы стремимся - вы можете видеть, как вы можете постепенно наращивать результаты на основе результатов, пока не получите то, что вам нужно.