Bash объявляет, что-p HISTIGNORE останавливает удар! Почему?

Это - известная проблема, и были отправлены несколько отчетов об ошибках.

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

Вот решение от форумов Fedora, которое похоже на него работы:

  • Щелкните правой кнопкой по апплету NetworkManager
  • Соединения редактирования
  • Нажмите вкладку Wireless (если это - то, что Вы используете),
  • Выберите свое соединение и нажмите кнопку Edit
  • Перейдите к вкладке IPv4 Settings
  • Нажмите кнопку Routes
  • Проверьте, "Используют это соединение только для ресурсов в его сети".
  • Нажмите OK
  • Снимите флажок "Доступный всем пользователям"
  • Нажмите Save

4
12.01.2014, 00:44
2 ответа

Ваш шаблон очень сложен. Отрицание регулярного выражения имеет тенденцию иметь экспоненциальное поведение в размере регулярного выражения, и у Вас есть отрицание в отрицании, которое могло привести к двойному экспоненциалу. Ulp.

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

Тем временем я сомневаюсь, что шаблон действительно делает то, что Вы хотите. Существует намного более простой способ проигнорировать команды однословные:

HISTIGNORE='+([a-z])'

Настройте это, если бы требуется проигнорировать даже редкие команды, содержащие другие символы на их имя, или если требуется проигнорировать пробел. Например:

HISTIGNORE=$'*([\t ])+([-%+,./0-9\:@A-Z_a-z])*([\t ])'

Обратите внимание, что Вы не должны, и действительно не должен, экспорт HISTIGNORE. Это - внутренняя переменная удара, не переменная среды.

6
27.01.2020, 20:50
  • 1
    Это действительно необходимый для выхода из a : символ двоеточия, который является частью, например, класса символов POSIX? Я также думал о вырезании моего довольно сложного HISTIGNORE оцените вниз $'!(*[[\:space\:]]*)'. –  Tim Friske 12.01.2014, 01:47
  • 2
    @TimFriske я не знаю ли : потребности, которых оставят, я не эксперт по удару. Можно избежать отрицания при помощи эквивалентного шаблона +([![:space:]]), хотя единственный уровень вложения отрицания должен быть в порядке. –  Gilles 'SO- stop being evil' 12.01.2014, 01:52
  • 3
    Не Делайте Вы имеете в виду ^ каре вместо ! символ восклицания для отрицания символов в классе? –  Tim Friske 12.01.2014, 02:16
  • 4
    @TimFriske В шаблонах шарика оболочки, стандарт !, хотя много оболочек включая удар также поддерживают ^. –  Gilles 'SO- stop being evil' 12.01.2014, 02:17

Тем временем я получил следующий ответ от Chet Ramey из bug-bash@gnu.org:

  1. matcher аварийно завершается и идет экспоненциал, когда обратные косые черты там. Я не занимался расследованиями почему.

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

  3. Значение HISTIGNORE без обратных косых черт, кажется, работает с помощью удара 4.2.45: простые команды однословные не добавляются к списку предыстории.

2
27.01.2020, 20:50

Теги

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