Questão Como unalias um menos?


Meu café da manhã ainda não havia chegado ao meu cérebro quando esqueci as citações:

alias grep="grep --color=always"

então, em vez disso, digitei:

alias grep=grep --color=always

me deixando com:

--color=always
grep=grep

nos meus aliases.

Quando tento limpar o --color = sempre usando unalias --color Eu recebo:

bash: unalias: --: invalid option
unalias: usage: unalias [-a] name [name ...]

Eu tentei escapar, citando e implorando, mas eu não consigo descobrir como fazer o comando unalias limpar a bagunça.

(Eu sei que um recomeço fará o truque, mas certamente deve haver outro jeito)


83


origem


Ha ha, agora eu tenho isso preso na minha também, trabalhando nisso EDIT: Parece que a resposta da choroba funcionou para mim - asmith
Meio que me lembra do velho echo > \\?\c:\windows\x.ou aquela vez que eu rm -rf * ~ por acaso. - Jason C


Respostas:


Você pode evitar sistemas compatíveis com POSIX interpretando travessões em comandos adicionando -- antes de qualquer argumento.

mtak@frisbee:~$ alias grep=grep --color=always
mtak@frisbee:~$ alias | grep color
alias --color='always'

mtak@frisbee:~$ unalias -- --color
mtak@frisbee:~$ alias | grep color
mtak@frisbee:~$

Isso também funciona com outros utilitários, digamos que você tenha um arquivo chamado -bla. Se você tentar removê-lo com rm você receberá o seguinte erro:

mtak@frisbee:~$ ls -- -bla
-bla
mtak@frisbee:~$ rm -bla
rm: invalid option -- 'b'
Try 'rm ./-bla' to remove the file '-bla'.
Try 'rm --help' for more information.

Usando -- antes do nome do arquivo, você removerá o arquivo:

mtak@frisbee:~$ rm -- -bla
mtak@frisbee:~$ ls -- -bla
ls: cannot access '-bla': No such file or directory

128



Embora seja interessante notar que, para arquivos, um método igualmente válido é usar um caminho para o arquivo que evita isso; então você pode usar ls ./-bla e rm ./-bla (ou especifique os caminhos completos, o que for mais fácil no seu caso). Obviamente, isso não funciona para aliases! - Muzer
pubs.opengroup.org/onlinepubs/009695399/basedefs/… Diretriz 10 - DarkHeart


Basta usar o mesmo truque usado para definir o alias

unalias whatever --color

94



Awesome, consertou para mim - asmith
funciona de fato, +1, mas a outra solução é um pouco mais limpa :) - Requist
De fato, claro :-) - choroba
unalias unalias --color - Cœur


Solução rápida

Consertar ambos os aliases errados você pode simplesmente executar

unalias grep --color


Entendendo o que aconteceu

Você dá o comando errado alias grep=grep --color=always sem "...".

  • Você define dois aliases  --color e grep; na verdade, você pode lê-lo no lado esquerdo de sua saída (tudo à esquerda do = é um comando com alias):

    --color=always
    grep=grep
    

    então você precisa desanuviar os dois.

  • Por que isso aconteceu?
    o ... no sinótico de alias significa que é possível fazer múltiplas atribuições em uma linha:

    alias: alias [-p] [nome [= valor] ...]

    Na saída de help alias você pode ler o sinótico, mas a partir de man bash você pode ler que é possível na mesma linha até mesmo listar e atribuir ao mesmo tempo:

    Quando argumentos são fornecidos, um alias é definido para cada nome cujo valor é fornecido.  Um espaço à direita no valor faz com que a próxima palavra seja verificada quanto à substituição de alias quando o alias é expandido. Para cada nome na lista de argumentos para o qual nenhum valor é fornecido, o nome e o valor do alias são impressos ... 

  • Você tem problemas para remover o primeiro --color sozinho.
    Isto porque é interpretado como opções para alias pela sua concha; para evitar isso você precisa se comunicar com o seu bash shell que o que está seguindo não é uma opção.

  • o cálice Sagrado do Linux: man, nesse caso man bash isso é um cofre cheio de tesouros úteis em situações como esta.
    Você pode ler a partir de man bash:

    - A - sinaliza o fim das opções e desativa mais   processamento de opção. Quaisquer argumentos após o - são tratados como nomes de arquivos   e argumentos. Um argumento de - é equivalente a -.

    Como relatado em outra resposta, a maneira POSIX é usar a combinação de caracteres especiais --.

    unalias -- --color
    
  • Mas porque unalias grep --color está funcionando? Quero dizer, sem usar --?
    Como funcionou para alias mesmo para unalias é possível dar mais de um nome de uma só vez (novamente [...]).

    unalias: unalias [-a] name [name ...]
    

    Eu posso dar apenas meu palpite: um bom hábito de programação é escrever as rotinas de leitura e escrita ao mesmo tempo, abaixo da mesma lógica. Então tem que ser para a opção de análise de rotinas de alias e unalias.

    Que isso funcione, você pode ver até mesmo deste comando (de um shell aberto para esse propósito) que não apagará todos os seus aliases:

    unalias whatever -a
    

Observação final

Na seção BUGS do man bash entre as poucas coisas relatadas, você pode ler :-)

Os aliases são confusos em alguns usos.


3