Comment unalias un moins?


83

Mon café du matin n'était pas encore arrivé à mon cerveau quand j'ai oublié les citations dans:

alias grep="grep --color=always"

alors j'ai plutôt tapé:

alias grep=grep --color=always

me laissant avec:

--color=always
grep=grep

dans mes alias.

Lorsque j'essaie de nettoyer la - couleur = toujours en utilisant unalias --colorje reçois:

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

J'ai essayé de m'échapper, de citer et de supplier, mais je n'arrive pas à comprendre comment faire en sorte que le commando unalias nettoie le gâchis.

(Je sais qu'un redémarrage fera l'affaire mais il doit sûrement y avoir un autre moyen)


13
Ha ha, maintenant je suis coincé dans la mienne aussi, j'y travaille. EDIT: On dirait que la réponse de choroba a fonctionné pour moi
asmith

9
Cela me rappelle un peu l’ancien echo > \\?\c:\windows\x., ou ce moment-là rm -rf * ~par accident.
Jason C

Réponses:


127

Vous pouvez éviter que les systèmes compatibles POSIX interprètent les tirets dans les commandes en ajoutant --avant tout argument.

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:~$

Cela fonctionne aussi avec d'autres utilitaires, disons que vous avez un fichier nommé -bla. Si vous essayez de le supprimer, rmvous obtiendrez l'erreur suivante:

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.

En utilisant --avant le nom du fichier, vous supprimerez le fichier:

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

19
Bien que cela vaille la peine de noter que pour les fichiers, une méthode tout aussi valable consiste à utiliser un chemin d'accès au fichier qui évite cela; afin que vous puissiez utiliser ls ./-blaet rm ./-bla(ou spécifier les chemins complets, ce qui est plus facile dans votre cas). Évidemment, cela ne fonctionne pas pour les alias!
Muzer


93

Utilisez simplement le même truc que vous avez utilisé pour définir l'alias

unalias whatever --color

9
fonctionne en effet, +1 mais l'autre solution est un peu plus propre :)
Requist

1
En effet, bien sûr :-)
choroba

unalias unalias --color
Cœur

3

Solution rapide

Pour résoudre les deux les mauvais alias vous pouvez simplement exécuter

unalias grep --color


Comprendre ce qui s'est passé

Vous donnez la mauvaise commande alias grep=grep --color=alwayssans "...".

  • Vous définissez deux alias --color et grep; En effet, vous pouvez le lire à gauche de votre sortie (tout à gauche de la =commande est un alias):

    --color=always
    grep=grep
    

    vous devez donc désactiver les deux.

  • Pourquoi est-ce arrivé?
    Dans ...le synoptique d’alias, il est possible de faire plusieurs assignations sur une seule ligne:

    alias: alias [-p] [nom [= valeur] ...]

    Dans la sortie de help aliasvous pouvez lire le synoptique mais de man bashvous pouvez lire cela est possible dans la même ligne même pour lister et assigner en même temps:

    Lorsque des arguments sont fournis, un alias est défini pour chaque nom dont la valeur est donnée. Un espace de fin dans valeur amène le mot suivant à être vérifié pour la substitution d'alias lorsque l'alias est développé. Pour chaque nom de la liste d'arguments pour lequel aucune valeur n'est fournie, le nom et la valeur de l'alias sont imprimés ...

  • Vous avez des problèmes pour supprimer le premier --colorseul .
    Car il est interprété comme des options pour aliasvotre shell; Pour éviter cela, vous devez informer votre bashshell que ce qui suit n’est pas une option.

  • Le Saint Graal de Linux:,man dans ce cas, man bashc’est un coffre rempli de trésors utiles dans une situation comme celle-ci.
    Vous pouvez lire de man bash:

    - A - signale la fin des options et désactive le traitement ultérieur des options. Tous les arguments après le - sont traités comme des noms de fichiers et des arguments . Un argument de - est équivalent à -.

    Comme indiqué dans une autre réponse, la méthode POSIX consiste à utiliser la combinaison de caractères spéciaux --.

    unalias -- --color
  • Mais pourquoi unalias grep --colortravaille-t-il? Je veux dire sans utiliser --?
    Comme cela a fonctionné aliasmême pour, unaliasil est possible de donner plus d’un nom à la fois (encore le [...]).

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

    Je ne peux que donner ma supposition: une bonne habitude de programmation consiste à écrire les routines de lecture et d’écriture en même temps, en-deçà de la même logique. Il faut donc que ce soit pour les options d’analyse des routines de aliaset unalias.

    Que cela fonctionne, vous pouvez voir même dans cette commande (à partir d'un shell ouvert à cet effet) que tous vos alias ne seront pas effacés:

    unalias whatever -a

Remarque finale

Dans la section BUGS des man bashquelques articles rapportés, vous pouvez lire:-)

Les pseudonymes sont déroutants dans certaines utilisations.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.