Question Comment désassembler un moins?


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

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 alias.

Lorsque j'essaie de nettoyer le --color = toujours en utilisant unalias --color Je reçois:

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

J'ai essayé de m'échapper, de citer et de mendier, mais je n'arrive pas à comprendre comment faire que le commando unalias nettoie le désordre.

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


83
2018-03-02 10:01


origine


Ha ha, maintenant je l'ai coincé dans le mien aussi, je travaille dessus EDIT: On dirait que la réponse de choroba a fonctionné pour moi - asmith
Un peu me rappelle l'ancien echo > \\?\c:\windows\x., ou ce temps je rm -rf * ~ par accident. - Jason C


Réponses:


Vous pouvez éviter les systèmes compatibles POSIX interprétant 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 le supprimer 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 -- avant le nom de fichier, vous supprimerez le fichier:

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

128
2018-03-02 10:07



Même si cela vaut la peine de noter que pour les fichiers, une méthode tout aussi valable consiste à utiliser un chemin vers le fichier qui évite cela; afin que vous puissiez utiliser ls ./-bla et rm ./-bla (ou spécifiez les chemins complets, quoi que ce soit de plus facile dans votre cas). Évidemment, cela ne fonctionne pas pour les alias cependant! - Muzer
pubs.opengroup.org/onlinepubs/009695399/basedefs/ ... Directive 10 - DarkHeart


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

unalias whatever --color

94
2018-03-02 10:03



Génial, corrigé pour moi - asmith
fonctionne bien, +1 mais l'autre solution est un peu plus propre :) - Requist
En effet bien sur :-) - choroba
unalias unalias --color - Cœur


Solution rapide

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

unalias grep --color


Comprendre ce qui s'est passé

Vous donnez la mauvaise commande alias grep=grep --color=always sans pour autant "...".

  • Vous définissez deux alias  --color et grep; en effet, vous pouvez le lire sur le côté gauche de votre sortie (tout à gauche du = est une commande d'alias):

    --color=always
    grep=grep
    

    vous devez donc supprimer les deux.

  • Pourquoi c'est arrivé?
    le ... dans le synoptique de l'alias, il est possible d'effectuer des assignations multiples sur une seule ligne:

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

    Dans la sortie de help alias vous pouvez lire le synoptique mais de man bash vous pouvez lire ce qui est possible dans la même ligne, même pour lister et assigner en même temps:

    Lorsque les arguments sont fournis, un alias est défini pour chaque nom dont la valeur est donnée.  Un espace à la fin de la valeur entraîne la vérification de la substitution d'alias par le mot suivant 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 --color seul.
    Parce que il est interprété comme des options pour alias par votre coquille; pour éviter cela, vous devez communiquer avec votre bash shell que ce qui le suit n'est pas une option.

  • le Saint Graal de Linux: man, dans ce cas man bash c'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 davantage   traitement des options. Tous les arguments après le - sont traités comme des noms de fichiers   et 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 --color travaille? 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 fois (encore une fois le [...]).

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

    Je ne peux que donner mon avis: une bonne habitude de programmation consiste à écrire les routines de lecture et d’écriture en même temps, sous la même logique. Donc, il doit être pour les routines d'analyse de l'option de alias et unalias.

    Que cela fonctionne, vous pouvez voir même à partir de cette commande (à partir d'un shell ouvert à cet effet) qui ne va pas effacer tous vos alias:

    unalias whatever -a
    

Remarque finale

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

Les alias sont déroutants dans certaines utilisations.


3
2018-03-06 10:55