Przywróć domyślne ustawienie shopt -s nocaseglob w OS X

4

Próbując sprawić, aby Bash dla OSX TAB-Auto-Completion był niewrażliwy na wielkość liter, zastosowałem się do sugestii, aby uruchomić następujące polecenia:

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

Jak przywrócić powyższe ustawienia do domyślnego systemu OS X?

Winterflags
źródło

Odpowiedzi:

1

Czy mówisz, że dodałeś te polecenia w skrypcie lub w jednym z plików dotfile ( .bash_profileitp.), Czy po prostu uruchomiłeś polecenia w samym terminalu?

Jeśli po prostu uruchomiłeś polecenia w terminalu, po prostu rozpocznij nową sesję, a ustawienia domyślne powinny zostać przywrócone. Otwórz nową kartę Terminala lub okno i sprawdź, czy przywrócona jest normalna funkcjonalność.

Te ustawienia nie powinny mieć wpływu na cały system, chyba że zostaną automatycznie załadowane do pliku, który jest pobierany podczas ładowania każdej sesji, w takim przypadku możesz po prostu usunąć wpis z twojego .bash_profilelub gdziekolwiek został dodany.

Możesz dwukrotnie sprawdzić, czy ustawienia są automatycznie ładowane w twoim pliku, .bash_profilewykonując polecenie sudo -sby to root, w którym momencie root'sładowane są pliki kropkowe, które mają pierwszeństwo przed poprzednim użytkownikiem. Jeśli działa normalnie jako root, zacznij kopać samodzielnie ~/.bash_profilelub ~/.bashrcusuń te polecenia / ustawienia. Domyślna funkcjonalność powinna zostać przywrócona przy następnym załadowaniu sesji powłoki.

rubinorails
źródło
2

Pierwsze rozwiązanie
Aby przywrócić sytuację, musisz znać poprzednią.
Polecenia bindi shoptsą tak przytulne, że wśród kilku przedstawionych opcji istnieje jedna ( -ppierwsza i -vdruga), która daje dane wyjściowe w formacie nadającym się do bezpośredniego przywrócenia :

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

Dane wyjściowe są zgłaszane powyżej po #znaku.
Gdy poznasz wartość początkową, możesz utworzyć kilka aliasów, aby przejść do opcji Ignoruj ​​więcej ( IgnoreGo) i wyjść z niej ( IgnoreExit):

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

Możesz umieścić ten alias z drugą powłoką konfiguracyjną (zwykle w ~/.bash_aliases lub ~/.bashrc) i używać go, kiedy chcesz. Problem polega na tym, że są ślepi, nie zobaczą faktycznej sytuacji twojej powłoki.

Lepsze rozwiązanie
Aby uczynić to wszystko niezależnym od twojej wiedzy na temat tych zmiennych wartości i nieco bardziej złożone, możesz utworzyć funkcję ( Store), aby utworzyć alias ( ReStore), aby cofnąć się, bez względu na początkową sytuację.

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

Nawet to można zapisać w pliku konfiguracyjnym powłoki (patrz wyżej). Za każdym razem, gdy Storejesteś w stanie zamrozić rzeczywistą sytuację, a wraz z ReStoretobą przywrócić ostatnią zamrożoną .
Zauważ, że \musi to być ostatni znak linii, aby podzielić polecenie w bardziej czytelnym formacie na dwa wiersze.

Uwaga
W moim systemie, aby wykonać polecenie (np. Aby nawigować cd) wystarczy podać bind 'set completion-ignore-case on'opcję włączania ignorowania, nawet gdy nocaseglobjest off. Włączenie nocaseglobjest potrzebne do rozszerzenia nazwy ścieżki. Istnieje nawet nocasematchdla wzorów. help bashczytaj więcej ...

Pomoc w zakresie poleceń
Polecenia bindi shoptsą wbudowane w powłokę. Oznacza to, że aby poprosić instrukcję o ich użycie, musisz użyć helpzamiast man.
Aby mieć wyjście czytelne dla człowieka, możesz użyć

shopt    | grep nocaseglob               # nocaseglob      on 
bind -V  | grep completion-ignore-case   # completion-ignore-case is set to `off'
Hastur
źródło
1

Jak czytamy w podręczniku Bash # 4.3.2 Wbudowany Shopt , jest to sposób na włączenie / wyłączenie shoptwartości:

-s → Włącz (ustaw) każdą nazwę optyczną.

-u → Wyłącz (wyłącz) każdą nazwę optyczną.

Podobnie możesz wyłączyć tę completion-ignore-caseopcję za pomocą:

bind 'set completion-ignore-case off'
fedorqui
źródło