Fryboyter

Autokorrektur der ZSH partiell zum Schweigen bringen

Gestern habe ich alle wichtigen Dienste von Uberspace V6 auf Uberspace V7 verschoben. So wie es aussieht, hat wohl alles geklappt. Allerdings ging mir die Autokorrektur der ZSH auf die Nerven.

Da mir Befehle wie “ssh nutzer@planet.uberspace” zu umständlich sind, habe ich in der ~/.ssh/config Einträge angelegt, sodass ich mich beispielsweise mittels “ssh uberspace6” auf meinen Uberspace6 einwählen kann. Vor kurzem kam hier noch der Eintrag für uberspace7 hinzu. Wenn ich nun “ssh uberspace7” ausführen wollte, hat mich die Autokorrektur der ZSH jedes Mal gefragt, ob ich nicht Uberspace gemeint habe. Nein verdammt, habe ich nicht. Das ging mir mit der Zeit auf den Zeiger. Eine komplette Deaktivierung der Korrektur für die Parameter wollte ich aber auch nicht. Daher habe ich mir den Alias ssh=‘nocorrect ssh’ erstellt. Damit verkneift sich die Korrektur die Fragen und ich habe meine Ruhe. Dank der Vervollständigungsfunktion bzw. History-Funktion entstehen in dem Fall auch keine Probleme und man kann schnell zwischen zwei ähnlichen Einträgen auswählen. Solch ein Alias lässt sich auch für jeden anderen Befehl anlegen.

Linux | OSBN

Fenstertitel von Terminator in Verbindung mit der ZSH

Als Terminal-Emulator setze ich, wie in einem anderen Artikel bereits geschrieben, Terminator ein. In Verbindung mit der ZSH gibt es hier allerdings etwas, dass mich stört. Und zwar wird als Fenstertitel immer /bin/zsh angezeigt.

ZSH Fenstertitel

Um das zu ändern, muss man die Datei .zshrc anpassen, welche man im Home-Verzeichnis findet. In dieser fügt man Folgendes ein.

case $TERM in xterm*) precmd () {print -Pn \"\\e]0;%~\\a\"} ;; esac

Speichert man die Datei nun und öffnet eine neue Instanz von Terminator, erhält man folgenden Titel angezeigt.

ZSH Fenstertitel

Was als Titel angezeigt wird, definiert man mittels print -Pn “\e]0;%~\a”. In diesem Beispiel wird einfach das Verzeichnis angezeigt, in dem man sich gerade befindet. Das Home-Verzeichnis wird hierbei mit dem üblichen ~ abgekürzt. Nimmt man stattdessen print -Pn “\e]0;%n@%m: %~\a” erhält man den Titel Benutzername@Hostname: Aktuelles Verzeichnis. Die ganzen Prompt Escapes wie %~ oder %n usw. kann man hier nachlesen. Somit lässt sich die Anzeige an die eigenen Wünsche anzeigen.

Linux | OSBN

run-help unter der ZSH

Heute habe ich mal wieder eine nette Funktion der ZSH entdeckt. Nehmen wir mal wir möchten mit tar etwas packen bzw. entpacken. Leider kann ich mir die Parameter hierzu absolut nicht merken (deswegen habe ich normalerweise Aliase angelegt). Bin ich nun an einem fremden Rechner, gebe ich in der Regel erst einmal den gewohnten Alias ein. Dann merke ich, dass dieser nicht vorhanden ist. Als Nächstes gebe ich dann tar ein, um dann festzustellen, dass ich die nötigen Parameter nicht im Kopf habe.

Normalerweise lösche ich dann den Befehl und rufe die Manpage von selbigen auf. Ist auf dem Rechner zufällig die ZSH installiert, kann das etwas beschleunigen, indem man den Befehl eingibt und danach Esc+h drückt. Hiermit wird dann die Manpage des betreffenden Befehls aufgerufen. Hat man dann alles, was man braucht, drückt man einfach q und landet wieder in der ZSH. Da der eingegebene Befehl hierbei nicht gelöscht wird, kann man diesen nun um die benötigten Parameter usw. erweitern.

Das mag jetzt keine weltbewegende Funktion sein und vielleicht gibt es unter einer anderen Shell etwas Vergleichbares. Aber so oder so ist das Ganze doch irgendwie nützlich.

Linux | OSBN

History-Datei der ZSH reparieren

Seit einiger Zeit habe ich das Problem, dass wenn ich Arch Linux herunterfahre, die Meldung “a stop job ist running for User Manager for UID 1026” erscheint und das System erst einmal 90 Sekunden wartet und dann erst mit dem Herunterfahren weitermacht. Die UID entspricht übrigens meinem normalen Benutzerkonto.

Nach längerem hin und her, da mir das hier beschriebene Debugging auch nicht weitergeholfen hat, habe ich mal getestet, was passiert wenn ich die Kiste per poweroff -f herunterfahre. Die erste positive Erkenntnis war, dass die Kiste ohne Fehler herunterfährt. Die erste negative Erkenntnis war allerdings, dass es dabei scheinbar die History-Datei von ZSH zerlegt hat. Sobald ich terminator aufrufe begrüßt mich die ZSH mit “zsh: corrupt history file /home/benutzer/.zhistory” Tja force hat halt in der Regel immer Nachteile und sollte gut überlegt sein…

Wären in der Datei nicht sehr viele Einträge vorhanden, von denen einige ziemlich komplex sind (zumindest für mich), hätte ich die Datei einfach gelöscht und von null wieder angefangen. Kommt aus genannten Gründen aber eben nicht infrage.

Also ist mal wieder Bastelstunde. Die Lösung war aber, vorüber ich heilfroh bin, sehr einfach. Korrekte History-Einträge sind wie folgt aufgebaut.

1383417678:0;nano /etc/fstab

Grob gesagt ein Timestamp gefolgt von einem Befehl.

Nachdem ich die ganze Datei durchgegangen bin (habe ich schon gesagt, dass die Datei ziemlich groß ist?) bin ich auf einen Eintrag gestoßen, der sich von den restlichen unterscheidet.

^@^@^@^@^@^@^@^@^@^@^@^@^: 1405154859:0;su

Da mit ansonsten nichts aufgefallen ist, habe ich die Originaldatei erst einmal weg gesichert und dann einfach mal das ganze Zeug vor dem Doppelpunkt des betreffenden Eintrags entfernt und die Datei abgespeichert. Und schon gibt es keine Fehlermeldung mehr.

Linux | OSBN

Killen mit der ZSH

Seit geraumer Zeit bin ich ein Fan der ZSH. Aber manchmal werde ich immer noch überrascht.

Gerade wollte ich mit dem Befehl “kill” einen Prozess abschießen. Nur welche PID hat er? Reflexartig wollte ich schon den Befehl “pidof” auspacken um die PID des Prozesses zu ermitteln. Stattdessen habe ich einfach mal TAB gedrückt, da man damit unter ZSH ja eine klasse Autovervollständigung hat. Und genau an der Stelle wurde ich mal wieder überrascht. Nachdem ich TAB gedrückt hatte, kam eine Auflistung aller Prozesses mit ihrer PID, aus der ich mit den Cursortasten den richtigen Prozess auswählen kann.

zsh killen

Also einfacher geht es nun wirklich nicht.

Welche Kniffe, Tricks usw. kennt Ihr noch für die ZSH? Oder für die jeweilige Shell, die ihr nutzt?

Linux | OSBN