Thema: shell
-
grep und ripgrep für die Codesuche: Rekursion, Filter und Exit-Codes
GNU grep durchsucht mit -r rekursiv, grenzt mit --include und --exclude-dir ein und liefert die Exit-Codes 0, 1 oder 2 für Treffer, keinen Treffer oder einen Fehler; ripgrep macht dasselbe standardmässig und überspringt dabei von Git ignorierte, versteckte und binäre Dateien. Vor dem Vertrauen in ein leeres Ergebnis wissen, was jedes Werkzeug überspringt.
-
Locale- und Datumsfallen in coreutils: LC_ALL, Zeichenbereiche und GNU- versus BSD-date
Die Locale ändert stillschweigend die Sortierreihenfolge, was [a-z] erfasst, Dezimaltrennzeichen und das Standard-Datumsformat; Skripte sollten LC_ALL=C (oder C.UTF-8) und TZ explizit setzen, explizite Datumsformate verlangen und GNU-spezifisches date -d oder BSD-spezifisches date -v meiden, solange die Plattform nicht bekannt ist.
-
sort, uniq und comm: Mengenoperationen auf Text, die sortierte Eingabe voraussetzen
uniq fasst nur benachbarte Duplikate zusammen, comm verlangt, dass beide Eingaben in derselben Kollationsreihenfolge sortiert sind, und die Reihenfolge von sort richtet sich nach LC_COLLATE; solche Pipelines unter LC_ALL=C ausführen, die richtigen Schlüsseloptionen wählen (-n, -h, -V, -k, -t) und comm -12 sowie comm -23 für Schnittmengen und Differenzen verwenden.
-
find und xargs ohne Überraschungen: NUL-getrennte Namen, -exec + und Trockenläufe
Dateinamen können Leerzeichen und Zeilenumbrüche enthalten, deshalb sollten sie mit -print0 und xargs -0 (oder find -exec ... {} +) von find an andere Programme übergeben werden; die Auswahl vor dem Ergänzen von -delete mit -print testen und xargs -r verwenden, damit eine leere Liste nichts ausführt.
-
Mit jq auf der Kommandozeile mit JSON arbeiten
jq liest JSON, wendet einen Filter an und gibt das Ergebnis aus: -r für einfache Strings verwenden, -c für ein Objekt pro Zeile, --arg und --argjson, um Werte sicher zu übergeben, -e, um null oder false in einen Exit-Code umzuwandeln, sowie select, map und to_entries zum Umformen; Filter nie durch String-Verkettung zusammensetzen.
-
Shell-Skripte schreiben, die kontrolliert fehlschlagen
set -euo pipefail verwenden, jede Expansion in Anführungszeichen setzen, [[ ]] und Arrays bevorzugen, mit ShellCheck prüfen und das Parsen von ls vermeiden; ein Skript, das beim ersten Fehler stoppt, ist vertrauenswürdiger als eines, das weiterläuft.
-
Ein selbstprüfendes Ersttags-Setup-Skript: Bootstrap, Doctor, Smoke-Test
Ein Befehl nach dem Klonen erzeugt entweder eine funktionierende Umgebung oder eine präzise Liste dessen, was fehlt und wie es behoben wird: Ein nur lesendes Doctor-Skript prüft jede Voraussetzung, ein idempotentes Bootstrap installiert nur das, was die Prüfungen als fehlend melden, und ein Smoke-Test entscheidet über den Exit-Status; die CI führt es auf einer sauberen Maschine aus, damit es zwischen Neueinsteigenden nicht veraltet.
-
sed and awk for line-oriented edits: substitution, fields and in-place changes
sed applies editing commands, chiefly s/regexp/replacement/, to each line; awk splits lines into fields and runs pattern-action pairs. Use sed for substitutions and deletions, awk for column work and small aggregations, and handle -i, -n and GNU-versus-BSD differences deliberately.
Maschinenlesbar: JSON