Wie kann man ein Minuszeichen erzielen?

5379
Requist

Mein Morgenkaffee hatte meinen Kopf noch nicht erreicht, als ich die Zitate vergessen hatte:

alias grep="grep --color=always" 

Also habe ich stattdessen Folgendes eingegeben:

alias grep=grep --color=always 

mich verlassen mit:

--color=always grep=grep 

in meinen Pseudonymen.

Wenn ich versuche, die --color = aufzuräumen, unalias --colorbekomme ich immer :

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

Ich habe versucht zu fliehen, zu zitieren und zu betteln, aber ich kann nicht herausfinden, wie man das Kommando unalias dazu bringt, das Chaos zu bereinigen.

(Ich weiß, dass ein Neustart den Trick ausführen wird, aber es muss doch einen anderen Weg geben)

83
Ha ha, jetzt habe ich es auch in mir festgehalten und daran gearbeitet EDIT: Sieht aus, als ob die Antwort von Choroba für mich funktioniert hat asmith vor 7 Jahren 13
Irgendwie erinnert mich das an das alte "Echo> \\? \ C: \ windows \ x.", oder dass ich aus Versehen "rm -rf * ~" habe. Jason C vor 7 Jahren 9

3 Antworten auf die Frage

128
mtak

Sie können vermeiden, dass POSIX-Systeme Bindestriche in Befehlen interpretieren, indem Sie --vor allen Argumenten Argumente hinzufügen .

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

Dies funktioniert auch mit anderen Dienstprogrammen. Angenommen, Sie haben eine Datei mit dem Namen -bla. Wenn Sie versuchen, es mit zu entfernen, rmwird der folgende Fehler angezeigt:

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. 

Mit --dem Dateinamen vor dem Dateinamen entfernen Sie die Datei:

mtak@frisbee:~$ rm -- -bla mtak@frisbee:~$ ls -- -bla ls: cannot access '-bla': No such file or directory 
Obwohl es sich lohnt zu beachten, dass für Dateien eine ebenso gültige Methode die Verwendung eines Pfads zu der Datei ist, der dies vermeidet; Sie können also `ls ./- bla` und` rm ./- bla` verwenden (oder die vollständigen Pfade angeben, was in Ihrem Fall einfacher ist). Offensichtlich funktioniert das aber nicht für Aliase! Muzer vor 7 Jahren 19
http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html Leitlinie 10 DarkHeart vor 7 Jahren 1
94
choroba

Verwenden Sie einfach den gleichen Trick, mit dem Sie den Alias ​​eingestellt haben

unalias whatever --color 
funktioniert zwar +1, aber die andere Lösung ist etwas sauberer :) Requist vor 7 Jahren 9
Natürlich natürlich :-) choroba vor 7 Jahren 1
"Unalias Unalias - Color" Cœur vor 7 Jahren 0
3
Hastur

Schnelle Lösung

Um beide falschen Aliase zu beheben, können Sie sie einfach ausführen

unalias grep --color 


Verstehen, was passiert ist

Du gibst den falschen Befehl alias grep=grep --color=alwaysohne "...".

  • Sie setzen zwei Aliase --color und grep; In der Tat können Sie es auf der linken Seite Ihrer Ausgabe lesen (alles auf der linken Seite des =Befehls ist ein Alias-Befehl):

    --color=always grep=grep 

    Sie müssen also beide Einstellungen löschen.

  • Warum ist das passiert?
    Das ...in der Synoptik von Alias ​​bedeutet, dass mehrere Zuweisungen in einer Zeile möglich sind:

    Alias: Alias ​​[-p] [Name [= Wert] ...]

    In der Ausgabe von help aliaskönnen Sie die man bashÜbersicht lesen, aber von können Sie lesen, dass es möglich ist, in derselben Zeile sogar eine Liste aufzulisten und gleichzeitig zuzuordnen:

    Wenn Argumente übergeben werden, wird für jeden Namen, dessen Wert angegeben wird, ein Alias ​​definiert. Ein nachfolgendes Leerzeichen im Wert bewirkt, dass das nächste Wort auf Alias-Ersetzung geprüft wird, wenn der Alias ​​erweitert wird. Für jeden Namen in der Argumentliste, für den kein Wert angegeben wird, werden Name und Wert des Alias ​​gedruckt ...

  • Sie haben Probleme, die erste --coloralleine zu deaktivieren .
    Dies, weil sie als Optionen interpretiert für aliasvon Shell; Um dies zu vermeiden, müssen Sie Ihrer bashShell mitteilen, dass das, was folgt, keine Option ist.

  • Der heilige Gral von Linux:man In diesem Fall man bashist dies eine Truhe voller Schätze, die in einer solchen Situation nützlich sind.
    Sie können lesen von man bash:

    - A - signalisiert das Ende der Optionen und deaktiviert die weitere Optionsverarbeitung. Alle Argumente nach dem - werden als Dateinamen und Argumente behandelt . Ein Argument von - ist äquivalent zu -.

    Wie in anderen Antworten berichtet, besteht die POSIX-Methode darin, die Sonderzeichenkombination zu verwenden --.

    unalias -- --color 
  • Aber warum unalias grep --colorfunktioniert das? Ich meine ohne zu benutzen --?
    Da es aliasauch für funktioniert unaliashat, ist es möglich, mehr als einen Namen auf einmal zu vergeben (wieder das [...]).

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

    Ich kann nur meine Vermutung geben: Eine gute Programmiergewohnheit besteht darin, die Lese- und Schreibroutinen gleichzeitig unter derselben Logik zu schreiben. Es muss also für die Option Parsing-Routinen von aliasund sein unalias.

    Dass dies funktioniert, können Sie sogar an diesem Befehl erkennen (von einer zu diesem Zweck geöffneten Shell), die nicht alle Ihre Aliasnamen löscht:

    unalias whatever -a 

Schlussbemerkung

Im Abschnitt BUGS man bashder wenigen Dinge, die Sie berichtet haben, können Sie lesen:-)

Aliase sind bei manchen Anwendungen verwirrend.