4

Пытаясь сделать так, чтобы Bash для OSX TAB -Auto-Completion не учитывал регистр, я последовал предложению запустить эти команды:

shopt -s nocaseglob
bind 'set completion-ignore-case on'

Как восстановить вышеуказанные настройки в OS X по умолчанию?

3 ответа3

2

Первое решение
Чтобы восстановить ситуацию, вы должны знать предыдущую.
Команды bind и shopt настолько уютно , что среди нескольких вариантов , которые они представляют, есть один -p для первого и -v для второго) , которые дают выход в формате годного к употреблению, почти сразу, чтобы восстановить их:

shopt -p   | grep nocaseglob               # shopt -u nocaseglob
bind  -v   | grep completion-ignore-case   # set completion-ignore-case off

Результат сообщается выше после знака # .
Как только вы знаете начальное значение, вы можете создать пару псевдонимов, чтобы перейти в Ignore More (IgnoreGo) и выйти (IgnoreExit) из него:

alias IgnoreGo="shopt -s nocaseglob; bind 'set completion-ignore-case on'"
alias IgnoreExit="shopt -u nocaseglob; bind 'set completion-ignore-case off'"

Вы можете поместить этот псевдоним в другую конфигурационную оболочку (обычно в ~/.bash_aliases или ~/.bashrc) и использовать, когда захотите. Проблема в том, что они слепы, они не увидят фактического положения вашей оболочки.

Лучшее решение
Просто чтобы сделать все это независимым от вашего знания этих значений переменных и немного более сложным, вы можете создать функцию (Store) для создания псевдонима (ReStore) для возврата, какой бы ни была начальная ситуация.

 Store(){ alias ReStore="$(shopt -p|grep nocaseglob); \
          bind '$(bind -v|grep completion-ignore-case)'"; }

Даже это можно записать в файле конфигурации вашей оболочки (см. Выше). Каждый раз с помощью Store вы замораживаете реальную ситуацию, а с помощью ReStore вы переустанавливаете последнюю заблокированную.
Обратите внимание, что \ должен быть последним символом строки, чтобы разделить команду в более удобочитаемом формате на две строки.

Заметка
В моей системе для выполнения команды (например, для навигации по cd) достаточно дать bind 'set completion-ignore-case on' чтобы включить регистр игнорирования, даже когда nocaseglob off . nocaseglob on необходим для расширения пути. Существует даже nocasematch для шаблонов. help bash чтобы прочитать больше ...

Помощь по командам
Команды bind и shopt встроены в оболочку. Это означает, что для того, чтобы попросить руководство по их использованию, вам нужно обратиться за help вместо man .
Чтобы иметь только удобочитаемый вывод, вы можете использовать

shopt    | grep nocaseglob               # nocaseglob      on 
bind -V  | grep completion-ignore-case   # completion-ignore-case is set to `off'
1

Вы говорите, что добавили эти команды в сценарий или в один из ваших файлов точек (.bash_profile и т.д.) Или что вы просто запустили команды в самом Терминале?

Если вы только что запустили команды в Терминале, просто начните новый сеанс, и значения по умолчанию должны быть восстановлены. Откройте новую вкладку «Терминал» или «Окно» и посмотрите, восстановлена ли нормальная функциональность, какой она должна быть.

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

Вы можете дважды проверить, автоматически ли загружаются настройки в ваш файл .bash_profile , выполнив sudo -s чтобы стать пользователем root , после чего загружаются точечные файлы root's , которые имеют приоритет перед предыдущим пользователем. Если он работает нормально как root, копайтесь в своем ~/.bash_profile или ~/.bashrc и удалите эти команды / настройки. Функциональность по умолчанию должна быть восстановлена при следующей загрузке сеанса оболочки.

1

Как читается в руководстве по Bash # 4.3.2 Shopt Builtin, это способ включить / отключить значения shopt :

-s → Включить (установить) каждое опциональное имя.

-u → Отключить (сбросить) каждое имя опции.

Точно так же вы можете отключить опцию completion-ignore-case с помощью:

bind 'set completion-ignore-case off'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .