Restaurar a configuração nocaseglob do shopt -s para o padrão no OS X

4

Ao tentar fazer com que o Bash para o OSX TAB -Auto-Completion seja insensitivo a maiúsculas e minúsculas, segui uma sugestão para executar estes comandos:

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

Como faço para restaurar as configurações acima para o padrão do OS X?

    
por Winterflags 23.11.2015 / 20:31

3 respostas

1

Você está dizendo que você adicionou esses comandos em um script ou em um dos seus dotfiles ( .bash_profile , etc.), ou que simplesmente executou os comandos no próprio Terminal?

Se você acabou de executar os comandos no Terminal, basta iniciar uma nova sessão e os padrões devem ser restaurados. Abra uma nova guia Terminal ou Janela e veja se a funcionalidade normal é restaurada, o que deveria ser.

Essas configurações não devem afetar todo o sistema, a menos que sejam carregadas automaticamente em um arquivo originado quando cada sessão for carregada. Nesse caso, você pode simplesmente remover a entrada do seu .bash_profile ou onde quer que tenha sido adicionada no primeiro lugar.

Você pode verificar novamente se as configurações estão sendo carregadas automaticamente em .bash_profile executando sudo -s para se tornar root , ponto no qual root's dotfiles são carregados, o que tem precedência sobre o usuário anterior . Se funcionar normalmente como root, vá cavando seu próprio ~/.bash_profile ou ~/.bashrc e remova esses comandos / configurações. A funcionalidade padrão deve ser restaurada na próxima vez que você carregar uma sessão de shell.

    
por 26.11.2015 / 05:11
2

Uma primeira solução
Para restaurar uma situação, você precisa conhecer a anterior.
Os comandos bind e shopt são tão aconchegantes que dentre as poucas opções que eles apresentam, há um ( -p para o primeiro e -v para o segundo) que dá o saída em um formato utilizável, quase diretamente, para restaurá-los :

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

A saída é informada acima após o sinal # .
Uma vez que você saiba o valor inicial, você pode criar um par de apelidos para ir em Ignorar Mais ( IgnoreGo ) e sair ( IgnoreExit ) dele:

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

Você pode colocar esse alias com o outro do seu shell de configuração (normalmente em ~/.bash_aliases ou ~/.bashrc ) e usar quando quiser. O problema é que eles são cegos, eles não verão a situação real da sua concha.

Uma solução melhor
Apenas para tornar tudo isso independente do seu conhecimento desses valores de variáveis, e um pouco mais complexo, você pode criar uma função ( Store ) para criar um alias ( ReStore ) para voltar, qualquer que tenha sido a situação inicial.

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

Mesmo isso pode ser escrito no arquivo de configuração do seu shell (veja acima). Cada vez com Store você congela a situação atual e com ReStore você restabelece o último congelado .
Note que \ tem que ser o último caractere da linha para dividir o comando em um formato mais legível em duas linhas.

Nota
No meu sistema para concluir um comando (por exemplo, para navegar com cd ), basta fornecer o bind 'set completion-ignore-case on' para ativar o caso de ignorar, mesmo quando nocaseglob for off . O nocaseglob on é necessário para a expansão do nome do caminho. Existe até o nocasematch para os padrões. help bash para ler mais ...

Ajuda sobre os comandos
Os comandos bind e shopt são construídos no shell. Isso significa que, para solicitar a utilização do manual, você precisa usar help em vez de man .
Para ter apenas uma saída legível, você pode usar

shopt    | grep nocaseglob               # nocaseglob      on 
bind -V  | grep completion-ignore-case   # completion-ignore-case is set to 'off'
    
por 26.11.2015 / 19:43
1

Como lido em Manual do Bash # 4.3.2 O Shopt Builtin , esta é a maneira de ativar / desativar os valores shopt :

-s → Enable (set) each optname.

-u → Disable (unset) each optname.

Da mesma forma, você pode desativar a opção completion-ignore-case com:

bind 'set completion-ignore-case off'
    
por 26.11.2015 / 15:53

Tags