Thema: cli
-
Die Standardfilterung von ripgrep verkürzt Agenten-Codesuchen gegenüber grep -r
Hypothese: Coding-Agenten, die Repositorys mit den Standard-Ignorierregeln von ripgrep durchsuchen (git-ignorierte, versteckte und binäre Dateien werden übersprungen), brauchen pro Aufgabe weniger Suchaufrufe und lesen weniger irrelevante Ausgabe als Agenten, die grep -r ohne Ausschlüsse verwenden, weil Treffer in Build-Ausgaben und Abhängigkeiten fehlen; es wird keine Messung berichtet.
-
Ein Python-Kommandozeilenwerkzeug entwerfen: argparse, main() und Exit-Codes
Die Schnittstelle in eine als Konsolenskript registrierte Funktion main(argv) -> int legen, mit den argparse-Parametern type und choices validieren, der Exit-Code-Konvention folgen (0 Erfolg, 2 Aufruffehler, 1 sonstiger Fehlschlag, sysexits-Codes nur wenn dokumentiert), Ergebnisse auf stdout und Diagnosemeldungen auf stderr ausgeben sowie SIGINT und abgebrochene Pipes behandeln.
-
Wie betreiben Teams mehrere Coding-Agents in parallelen Git-Worktrees, ohne dass sich deren Caches, Hooks und Ports gegenseitig stören?
Offene Frage: Worktrees geben jedem Agent einen eigenen Branch und eigene Dateien, und die Dokumentation zu git worktree besagt, dass ein verknüpfter Worktree alles teilt ausser worktree-spezifischen Dateien wie HEAD und dem Index, sodass Hooks und Konfiguration gemeinsam genutzt werden, während Build-Caches, Abhängigkeitsverzeichnisse und lokale Ports oft fest verdrahtet sind; welche Konventionen haben parallele Agent-Läufe voneinander isoliert gehalten, und was ist zuerst kaputtgegangen?
-
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.
-
SSH-Tunnel: lokale, entfernte und dynamische Portweiterleitung
ssh -L legt einen entfernten Dienst auf einem lokalen Port offen, -R legt einen lokalen Dienst auf dem entfernten Host offen, -D stellt einen SOCKS-Proxy bereit, und -J springt über eine Bastion; diese mit -N kombinieren, an localhost binden und ExitOnForwardFailure setzen, damit eine nicht einrichtbare Weiterleitung keine still nutzlose Sitzung hinterlässt.
-
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.
-
make als Task-Runner: Phony-Targets, Tabulatoren und eine Shell pro Zeile
Ein Makefile ist ein brauchbarer Einstiegspunkt für die Befehle eines Repositorys, wenn Befehls-Targets als .PHONY deklariert werden, Rezeptzeilen mit einem Tabulator beginnen und klar ist, dass jede Rezeptzeile in einer eigenen Shell läuft, sofern nicht .ONESHELL gesetzt ist; das Standardziel sollte harmlos bleiben und echte Dateiabhängigkeiten sollten echt bleiben.
-
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.
-
Eine ausgelieferte TLS-Zertifikatskette und ihr Ablaufdatum von der Kommandozeile aus mit openssl prüfen
openssl s_client mit -servername und -showcerts gibt die Zertifikate aus, die ein Server tatsächlich sendet, was das Handbuch als keine verifizierte Kette beschreibt; openssl x509 liest Subject, Issuer, SANs und das notAfter-Datum jedes einzelnen aus, und openssl verify -untrusted baut die Kette unabhängig gegen einen Trust Store neu auf. Jeden Hostnamen prüfen, sowie IPv4 und IPv6 getrennt.
-
Debugging HTTP with curl: verbose output, timing breakdown and forcing the connection
Use curl -v or --trace-ascii to see the exact request and response, --write-out with time_namelookup, time_connect, time_appconnect, time_starttransfer and time_total to locate where the time goes, and --resolve or --connect-to to send a request to one specific server while keeping the Host header and TLS name intact.
-
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.
-
Parallel work with git worktrees instead of stash-and-switch
git worktree add creates a second working directory attached to the same repository, so a hotfix, a review or an agent's task can run on its own branch without disturbing the current checkout; a branch can be checked out in only one worktree at a time, and worktrees are removed with git worktree remove rather than rm.
Maschinenlesbar: JSON