So verwenden Sie Ihre .bashrc-Datei, um mit der Hälfte der Tastenanschläge doppelt so viel zu tun

In meinem letzten Beitrag über das Einrichten von Ubuntu mit Bash-Skripten habe ich kurz auf die Magie von hingewiesen .bashrc. Dies wurde dem nicht wirklich gerecht, daher hier ein kurzer Beitrag, der ein bisschen mehr Details darüber bietet, was die Bash-Konfigurationsdatei kann.

Meine aktuelle Konfiguration verbessert meinen Workflow erheblich und spart mir weit über 50% der Tastenanschläge, die ich ohne sie ausführen müsste! Schauen wir uns einige Beispiele für Aliase, Funktionen und Eingabeaufforderungskonfigurationen an, die unseren Workflow verbessern können, indem sie uns helfen, mit weniger Tastendrücken effizienter zu arbeiten.

Bash Aliase

Ein intelligent geschriebenes .bashrckann eine ganze Reihe von Tastenanschlägen sparen. Wir können dies im wörtlichen Sinne nutzen, indem wir Bash-Aliase oder Zeichenfolgen verwenden, die zu größeren Befehlen erweitert werden. Als Beispiel dient hier ein Bash-Alias ​​zum Kopieren von Dateien im Terminal:

# Always copy contents of directories (r)ecursively and explain (v) what was done alias cp="cp -rv"

Der aliasBefehl definiert die Zeichenfolge, die wir eingeben, gefolgt von der Zeichenfolge, auf die diese Zeichenfolge erweitert wird. Wir können vorhandene Befehle wie cpoben überschreiben . Der cpBefehl allein kopiert nur Dateien, keine Verzeichnisse, und ist im Hintergrund erfolgreich. Mit diesem Alias ​​müssen wir nicht daran denken, diese beiden Flags cdoder lsden Speicherort unserer kopierten Datei zu übergeben, um zu bestätigen, dass sie vorhanden ist! Nur diese beiden Tastendrücke (für cund d) erledigen das alles für uns.

Hier sind einige weitere .bashrcAliase zum Übergeben von Flags mit allgemeinen Funktionen.

# List contents with colors for file types, (A)lmost all hidden files (without . and ..), in (C)olumns, with class indicators (F) alias ls="ls --color=auto -ACF" # List contents with colors for file types, (a)ll hidden entries (including . and ..), use (l)ong listing format, with class indicators (F) alias ll="ls --color=auto -alF" # Explain (v) what was done when moving a file alias mv="mv -v" # Create any non-existent (p)arent directories and explain (v) what was done alias mkdir="mkdir -pv" # Always try to (c)ontinue getting a partially-downloaded file alias wget="wget -c"

Aliase sind nützlich, wenn Sie auch lange Befehle vermeiden möchten. Hier sind einige, die ich bei der Arbeit mit Python-Umgebungen verwende:

alias pym="python3 manage.py" alias mkenv="python3 -m venv env" alias startenv="source env/bin/activate && which python3" alias stopenv="deactivate"

Für weitere Anregungen, wie Bash-Aliase Zeit sparen können, empfehle ich die Beispiele in diesem Artikel.

Bash-Funktionen

Ein Nachteil der oben genannten Aliase ist, dass sie eher statisch sind - sie werden immer genau auf den deklarierten Text erweitert. Für einen Bash-Alias, der Argumente akzeptiert, müssen wir eine Funktion erstellen. Wir können das so machen:

# Show contents of the directory after changing to it function cd () { builtin cd "$1" ls -ACF }

Ich kann nicht anfangen zu zählen, wie oft ich getippt habe cdund dann lsunmittelbar danach, um den Inhalt des Verzeichnisses zu sehen, in dem ich mich jetzt befinde. Mit dieser Funktion geschieht alles nur mit diesen beiden Buchstaben! Die Funktion verwendet das erste Argument $1als Speicherort für das Verzeichnis und druckt dann den Inhalt dieses Verzeichnisses in gut formatierten Spalten mit Dateitypindikatoren. Der builtinTeil ist erforderlich, um Bash zu erhalten, damit wir diesen Standardbefehl überschreiben können.

Bash-Funktionen sind auch beim Herunterladen oder Aktualisieren von Software sehr nützlich. Zuvor habe ich alle paar Wochen mindestens ein paar Minuten damit verbracht, die neue erweiterte Version des statischen Site-Generators Hugo herunterzuladen, dank ihrer hervorragenden Versandhäufigkeit. Mit einer Funktion muss ich nur die Version übergeben, und das Upgrade erfolgt in wenigen Sekunden.

# Hugo install or upgrade function gethugo () { wget -q -P tmp/ //github.com/gohugoio/hugo/releases/download/v"[email protected]"/hugo_extended_"[email protected]"_Linux-64bit.tar.gz tar xf tmp/hugo_extended_"[email protected]"_Linux-64bit.tar.gz -C tmp/ sudo mv -f tmp/hugo /usr/local/bin/ rm -rf tmp/ hugo version }

Die [email protected]Notation nimmt einfach alle angegebenen Argumente und ersetzt ihren Platz in der Funktion. Um die obige Funktion auszuführen und Hugo Version 0.57.2 herunterzuladen, verwenden wir den Befehl gethugo 0.57.2.

Ich habe auch eine für Golang:

function getgolang () { sudo rm -rf /usr/local/go wget -q -P tmp/ //dl.google.com/go/go"[email protected]".linux-amd64.tar.gz sudo tar -C /usr/local -xzf tmp/go"[email protected]".linux-amd64.tar.gz rm -rf tmp/ go version }

Oder wie wäre es mit einer Funktion, die dem aktuellen Repository eine Remote-Ursprungs-URL für GitLab hinzufügt?

function glab () { git remote set-url origin --add [email protected]:"[email protected]"/"${PWD##*/}".git git remote -v }

Mit glab usernamekönnen wir originmit unserem usernameauf GitLab.com eine neue URL für das aktuelle Git-Repository erstellen . Durch das Verschieben auf eine neue Remote-URL wird automatisch ein neues privates GitLab-Repository erstellt. Dies ist also eine nützliche Verknüpfung zum Erstellen von Backups!

Bash-Funktionen sind wirklich nur durch die Möglichkeiten der Skripterstellung begrenzt, für die es praktisch nur wenige Grenzen gibt. Wenn wir häufig etwas tun, bei dem ein paar Zeilen in ein Terminal eingegeben werden müssen, können wir wahrscheinlich eine Bash-Funktion dafür erstellen!

Bash-Eingabeaufforderung

Neben dem Verzeichnisinhalt ist es auch nützlich, den vollständigen Pfad des Verzeichnisses anzuzeigen, in dem wir uns befinden. Die Bash-Eingabeaufforderung kann uns diesen Pfad zusammen mit anderen nützlichen Informationen wie unserem aktuellen Git-Zweig anzeigen. Um die Lesbarkeit zu verbessern, können wir Farben für jeden Teil der Eingabeaufforderung definieren. So können wir unsere Eingabeaufforderung einrichten .bashrc, um dies zu erreichen:

# Colour codes are cumbersome, so let's name them txtcyn="\[\e[0;96m\]" # Cyan txtpur="\[\e[0;35m\]" # Purple txtwht="\[\e[0;37m\]" # White txtrst="\[\e[0m\]" # Text Reset # Which (C)olour for what part of the prompt? pathC="${txtcyn}" gitC="${txtpur}" pointerC="${txtwht}" normalC="${txtrst}" # Get the name of our branch and put parenthesis around it gitBranch()  sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'  # Build the prompt export PS1="${pathC}\w ${gitC}\$(gitBranch) ${pointerC}\$${normalC} "

Ergebnis:

~/github/myrepo (master) $

Durch die Benennung der Farben können Sie leicht erkennen, wo eine Farbe beginnt und endet und wo die nächste beginnt. Die Eingabeaufforderung, die wir in unserem Terminal sehen, wird durch die folgende Zeichenfolge definiert export PS1, wobei für jede Komponente der Eingabeaufforderung eine Escape-Sequenz festgelegt wird. Lassen Sie uns das zusammenfassen:

  • \w zeigt das aktuelle Arbeitsverzeichnis an,
  • \$(gitBranch)ruft die gitBranchoben definierte Funktion auf, die den aktuellen Git-Zweig anzeigt,
  • \$ zeigt ein "$" an, wenn Sie ein normaler Benutzer sind oder sich im normalen Benutzermodus befinden, und ein "#", wenn Sie root sind.

Die vollständige Liste der Bash-Escape-Sequenzen kann uns dabei helfen, viele weitere Informationen anzuzeigen, einschließlich Uhrzeit und Datum! Bash-Eingabeaufforderungen sind in hohem Maße anpassbar und individuell. Sie können sie also nach Belieben einrichten.

Hier sind einige Optionen, die Informationen in den Mittelpunkt stellen und uns helfen können, effizienter zu arbeiten.

Für den Aufschub abgeneigt

Benutzername und aktuelle Uhrzeit in Sekunden im 24-Stunden-Format HH: MM: SS:

export PS1="${userC}\u ${normalC}at \t >"
user at 09:35:55 >

Für diejenigen, die immer wissen möchten, wo sie stehen

Vollständiger Dateipfad in einer separaten Zeile und Benutzername:

export PS1="${pathC}\w${normalC}\n\u:"
~/github/myrepo user: 

Für den Minimalisten

export PS1=">"
>

Wir können viele praktische Eingabeaufforderungen nur mit den grundlegenden Escape-Sequenzen erstellen. Sobald wir anfangen, Funktionen in Eingabeaufforderungen zu integrieren, wie im Beispiel des Git-Zweigs, können die Dinge sehr kompliziert werden. Ob diese Komplikation eine Ergänzung oder eine Beeinträchtigung Ihrer Produktivität darstellt, können nur Sie sicher wissen!

Viele ausgefallene Bash-Eingabeaufforderungen sind mit Programmen möglich, die mit einer schnellen Suche verfügbar sind. Ich habe hier absichtlich keine Beispiele zur Verfügung gestellt, da es einige Stunden dauern kann, bis Sie wieder zu dem zurückkehren, was Sie getan haben, bevor Sie mit dem Lesen dieses Beitrags begonnen haben Ich kann das einfach nicht auf meinem Gewissen haben. ?

Wir haben jetzt hoffentlich eine gute Balance zwischen investierter Zeit und Nutzen aus unserer Bash-Konfigurationsdatei gefunden! Ich hoffe, Sie nutzen Ihre neu wiederhergestellte Tastenanschlagkapazität für immer.