Это - известная проблема, и были отправлены несколько отчетов об ошибках.
Существует также обходное решение для человечности, но я не думаю, что это будет работать на пользователей Arch, потому что они больше не используют init сценарии. Я держал пари, что их фиксация может быть портирована, но я не знаю достаточно о systemd
сделать это.
Вот решение от форумов Fedora, которое похоже на него работы:
Ваш шаблон очень сложен. Отрицание регулярного выражения имеет тенденцию иметь экспоненциальное поведение в размере регулярного выражения, и у Вас есть отрицание в отрицании, которое могло привести к двойному экспоненциалу. Ulp.
Тем не менее, такое длинное замораживание не желательно. Я наблюдаю то же поведение относительно Debian с ударом 4.2.37 на Debian, так сообщите об этом как об ошибке в восходящем направлении. Но будьте готовы быть сказанными, что это было бы слишком много работы для слишком небольшого преимущества, чтобы заставить этот пограничный случай работать.
Тем временем я сомневаюсь, что шаблон действительно делает то, что Вы хотите. Существует намного более простой способ проигнорировать команды однословные:
HISTIGNORE='+([a-z])'
Настройте это, если бы требуется проигнорировать даже редкие команды, содержащие другие символы на их имя, или если требуется проигнорировать пробел. Например:
HISTIGNORE=$'*([\t ])+([-%+,./0-9\:@A-Z_a-z])*([\t ])'
Обратите внимание, что Вы не должны, и действительно не должен, экспорт HISTIGNORE
. Это - внутренняя переменная удара, не переменная среды.
Тем временем я получил следующий ответ от Chet Ramey из bug-bash@gnu.org:
matcher аварийно завершается и идет экспоненциал, когда обратные косые черты там. Я не занимался расследованиями почему.
Вам не нужны обратные косые черты; двоеточия являются частью шаблонов. Проигнорировать синтаксический анализатор шаблона понимает синтаксис шаблона, таким образом, двоеточия в выражениях скобки не разделяют значение.
Значение HISTIGNORE без обратных косых черт, кажется, работает с помощью удара 4.2.45: простые команды однословные не добавляются к списку предыстории.
:
символ двоеточия, который является частью, например, класса символов POSIX? Я также думал о вырезании моего довольно сложногоHISTIGNORE
оцените вниз$'!(*[[\:space\:]]*)'
. – Tim Friske 12.01.2014, 01:47:
потребности, которых оставят, я не эксперт по удару. Можно избежать отрицания при помощи эквивалентного шаблона+([![:space:]])
, хотя единственный уровень вложения отрицания должен быть в порядке. – Gilles 'SO- stop being evil' 12.01.2014, 01:52^
каре вместо!
символ восклицания для отрицания символов в классе? – Tim Friske 12.01.2014, 02:16!
, хотя много оболочек включая удар также поддерживают^
. – Gilles 'SO- stop being evil' 12.01.2014, 02:17