-bash: !: событие не найдено [закрыто]

Я хочу удалить все папки и файлы, кроме папки с именем docs.

echo !(docs)

но я получил -bash: !: событие не найдено?

Я использую терминал mac по умолчанию.

0
задан 15 July 2016 в 07:24

1 ответ

У Вас есть две проблемы:

  1. !(doc) расширенный шарик и extglob выключен. Если Ваш удар поддерживает extglob, можно включить его с:

    shopt -s extglob
    
  2. Расширение истории включено. Для превращения, если выключенный работать

    set -H
    

    Причины расширения истории удивительные вещи произойти, когда ! используются. Если Вы не используете расширение истории, можно избежать неожиданностей путем выключения его.

Пример

Давайте рассмотрим каталог с этими файлами:

$ ls
docs  file1  file2

Теперь, давайте выключим extglob и историю на и выполним Вашу команду:

$ shopt -u extglob; set -H
$ echo !(docs)
bash: !: event not found

Это - точно сообщение об ошибке, что Вы сообщили. Таким образом это, кажется, Ваша ситуация.

Теперь, давайте избежим extglob и выключим расширение истории:

$ shopt -u extglob; set +H
$ echo !(docs)
bash: syntax error near unexpected token `('

Эта ошибка отличается от той, о которой Вы сообщили. Это не Ваша ситуация.

Наконец, давайте выполним Вашу команду с extglob на. Для полноты мы попробуем расширение истории в обеих настройках:

$ shopt -s extglob; set +H
$ echo !(docs)
file1 file2
$ shopt -s extglob; set -H
$ echo !(docs)
file1 file2

Оба из них работают. Таким образом пока Ваша оболочка поддерживает extglob и включила его, Ваша команда должна работать.

2
ответ дан 28 September 2019 в 23:22

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

Похожие вопросы: