Gastbeitrag von Sven Wick
Die Shell. Von vielen gefürchtet wie der Teufel das Weihwasser, aber immer noch eins der effektivsten Werkzeuge heutzutage. Doch auch hier kann man wertvolle Zeit vergeuden, z.B. beim Suchen alter Befehle.
Den history Befehl lernt man schnell kennen sowie das Zurückholen vorheriger Befehle mit der Pfeiltaste nach oben. Sitzt man neben einem Kollegen, der in der Historie mit der Pfeiltaste sucht, kann dies schnell zum Geduldspiel werden und ein Tipp zu STRG + r wird nicht selten zur Heiligen Offenbarung.
Doch auch hier fühlt es sich manchmal an wie beim Drehen eines Glücksrades und man schießt beim Suchen nicht selten übers Ziel hinaus. Hier möchte nun mcfly unterstützen damit man schneller findet statt sucht.
Funktionsweise
Das Programm klinkt sich beim Drücken von STRG+r ein und ersetzt dadurch das bisherige Such-Interface der Shell. Ein Suchergebnis kann direkt durch ENTER wieder ausgeführt bzw. beim Drücken der TAB Taste vorher nochmal editiert werden. Suchergebnisse werden nach verschiedenen Kriterien priorisiert. Mit einberechnet werden z.b. der aktuelle Ordner in dem man sich befindet, wie oft man einen Befehl ausgeführt hat, etc… Das History File der Shell wird weiter gepflegt, sodass man mcfly ohne kalten Entzug leicht wieder absetzen kann.
Shell-Support
Unterstützt werden aktuell folgende Shells:
- Bash
- Zsh
- Fish
Installation
Es gibt fertige Binaries zum Runterladen und man entpackt sich das passende davon einfach in den Pfad. mcfly erzeugt Shell Code für die jeweilige Shell, den man sich entweder selbst in die passende Config schreibt,
oder via eval direkt ausführt. Letzteres ist zwar bequemer und vereinfacht auch das Updaten, jedoch sollte man sich vorher immer mal anschauen, was man da rennen lässt.
Anzeigen des Shell Codes
- Bash:
mcfly init bash - Zsh:
mcfly init zsh - Fish:
mcfly init fish
Aktivieren des Shell Codes
- Bash:
eval "$(mcfly init bash)" - Zsh:
eval "$(mcfly init zsh)" - Fish:
mcfly init fish | source
Damit man dies nicht immer wieder eingeben muss, trägt man es in seine passende Shell Config ein.
Beispiel für Bash
#
# mcfly - init
#
eval "$(mcfly init bash)"
Im Falle von Bash sollte man sich jedoch noch einen zusätzlichen TRAP setzen, ansonsten müllt man sich /tmp/ über die Zeit voll
#
# mcfly - cleanup
#
# <https://github.com/cantino/mcfly/issues/71>
mcfly_cleanup() {
if [ ! -z "${MCFLY_HISTORY}" ] && [[ -f "${MCFLY_HISTORY}" ]]; then
rm "${MCFLY_HISTORY}"
fi
}
trap mcfly_cleanup EXIT
Für Zsh und Fish wird das nicht gebraucht. Zsh räumt selbst auf und für Fish wird kein Tempfile verwendet.
Konfiguration
Über Umgebungsvariablen kann man sich vieles anpassen wie z.B.
- Anzahl Suchergebnisse
- Farbschema
- Reihenfolge der Ergebnisse
- …und einiges mehr
Der Name des Tools ist eine Anspielung auf die bekannten Szenen aus den Zurück in die Zukunft Filmen.

McFly funktionierte bei mir mit neuerem Kernel nicht mehr (KDE/Plasma, bash, Kernel 6.6.3-1-siduction-amd64)
Lösung (auf eigene Gefahr!):
Neu erstellen:
/etc/sysctl.d/10_legacy_tiocsti.conf
Inhalt:
dev.tty.legacy_tiocsti=1
Quelle: https://github.com/cantino/mcfly/issues/333
geniales Tool, gerade die Auswahlansicht / -übersicht. Habs mir gerade auf Gentoo gepackt macht echt spass – danke dafür. 🙂
eine schönes geniales Ergänzungstool zu diesem genialen Tool wäre: marker – https://github.com/dawidstencel/marker_python3
Es ist doch immer wieder interessant, wie, bzw. was hier so diskutiert wird, aber die einfachsten Lösungen bleiben außen vor.
Erzähl mal bitte.
Mit mcfly kam ich nach einem kurzen Test nicht zurecht.
Der wahre Mehrwert in dem Artikel lag für mich in dem Hinweis mit dem:
“STRG+r”
Ctrl-R – ja, das war wie eine Offenbarung damals, denn ich bin seinerzeit erst nach mehreren Jahren Shell-Benutzung darauf gestoßen. Seither erzähle ich davon jedem Linux-Neuling als erstes…
Ein Hidden Gem sozusagen 😀
Hidden was?
Ctrl-R – Vielen Dank für das vorosterliche Ostergeschenk! Das ist genial!
Ich habe seit 15 Jahren die .bash_history durchsucht…
Fällt wie Schuppen von den Augen… Hat bei mir damals auch einige Jahre gedauert. 😀
grep “suchwort” .zhistory
Hast du mcfly auch mal selber ausprobiert? Ich verstehe ja wenn jemand meint STRG+R reicht mir, aber GREP? 😂😂
Geht doch beides gut – mal dies, mal jenes.
_mcfly_ würde ich auch mal versuchen, falls es mal in Debian auftaucht.
Oder einfach folgendes in die inputrc eingeben: