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)
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:-)