Псевдоним не работает с моей командой mongo --eval

У меня есть следующая команда оболочки mongo, чтобы удалить всех пользователей, которые не являются администраторами

mongo --eval 'db.users.remove({group:{$ne:"admin"}})' collection

Это работает.

Я хочу создать псевдоним для этой команды, но следующие возможные варианты, которые я пробовал, дали мне соответствующие ошибки

  1. alias mdelna="mongo --eval 'db.users.remove({group:{$ne:"admin"}})' collection"

    SyntaxError: Unexpected token :

  2. alias mdelna="mongo --eval 'db.users.remove({group:{"$ne":"admin"}})' collection"

    SyntaxError: Unexpected token :

  3. alias mdelna="mongo --eval 'db.users.remove({group:{"$"ne:"admin"}})' collection"

    ReferenceError: admin is not defined

  4. alias mdelna="mongo --eval 'db.users.remove({group:{"$"ne:'admin'}})' collection"

    ReferenceError: admin is not defined

  5. alias mdelna="mongo --eval 'db.users.remove({group:{"$"ne:admin}})' collection"

    ReferenceError: admin is not defined

  6. 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

И теперь это гораздо больше похоже на то, к чему мы стремимся - вы можете видеть, как вы можете постепенно наращивать результаты на основе результатов, пока не получите то, что вам нужно.

Другие вопросы по тегам