83 votes

Comment désaliaser un moins ?

Mon café du matin n'avait pas encore atteint mon cerveau quand j'ai oublié les citations :

alias grep="grep --color=always"

alors à la place, j'ai tapé :

alias grep=grep --color=always

me laissant avec :

--color=always
grep=grep

dans mes pseudonymes.

Quand j'essaie de nettoyer le --color=always en utilisant unalias --color J'ai compris :

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

J'ai essayé d'échapper, de citer et de supplier, mais je n'arrive pas à trouver comment faire en sorte que la commando unalias nettoie le bazar.

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

124voto

mtak Points 14830

Vous pouvez éviter que les systèmes conformes à 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 également avec d'autres utilitaires, disons que vous avez un fichier nommé -bla . Si vous essayez de l'enlever avec rm vous 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 -- devant 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

91voto

choroba Points 17339

Il suffit d'utiliser la même astuce que celle utilisée pour définir l'alias

unalias whatever --color

3voto

Hastur Points 17791

Solution rapide

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

unalias grep --color

Comprendre ce qui s'est passé

Vous donnez le mauvais ordre alias grep=grep --color=always sans "..." .

  • Vous avez défini deux alias --color y grep ; en effet, vous pouvez le lire sur le côté gauche de votre sortie (tout à gauche de l'écran de l'utilisateur). = est une commande aliasée) :

    --color=always
    grep=grep

    vous devez donc désactiver les deux.

  • Pourquoi c'est arrivé ?
    Le site ... dans le synoptique de l'alias signifie qu'il est possible de faire plusieurs assignations dans une ligne :

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

    Dans la sortie de help alias vous pouvez lire le synoptique mais de man bash vous pouvez lire qu'il est possible dans la même ligne de lister et d'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 à la fin de la valeur fait que le mot suivant est 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 débloquer le premier --color seul .
    Ceci parce que il est interprété comme des options para alias par votre Shell ; pour éviter cela vous devez communiquer à votre bash Shell que ce qui le suit n'est pas une option.

  • El Le Saint Graal de Linux : man dans ce cas man bash c'est un coffret rempli de trésors utiles dans une situation comme celle-ci.
    Vous pouvez lire man bash :

    -- A -- signale la fin des options et désactive les options supplémentaires. traitement des options. Tous les arguments après le -- sont traités comme des noms de fichiers et les 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 suivante -- .

    unalias -- --color
  • Pero pourquoi unalias grep --color fonctionne ? Je veux dire sans utiliser -- ?
    Comme cela a fonctionné pour alias même pour unalias il est possible de donner plus d'un nom en une seule fois (encore une fois le [...] ).

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

    Je ne peux donner que mon avis : une bonne habitude de programmation est d'écrire les routines de lecture et d'écriture en même temps, sous la même logique. Il doit donc en être ainsi pour les routines d'analyse des options de alias y unalias .

    Que cela fonctionne vous pouvez voir même à partir de cette commande (à partir d'un Shell ouvert à cet effet) qui n'effacera pas tous vos alias :

    unalias whatever -a

Remarque finale

Dans la section BUGS de man bash parmi les quelques choses rapportées que vous pouvez lire :-)

Les alias prêtent à confusion dans certaines utilisations.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X