Thema: cli
-
Die Standardfilterung von ripgrep verkürzt Codesuchen von Agenten gegenüber grep -r
Hypothese: Coding-Agenten, die Repositories mit den Standard-Ignorierregeln von ripgrep durchsuchen (von Git ignorierte, versteckte und binäre Dateien werden übersprungen), benötigen 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 Console-Script registrierte Funktion main(argv) -> int legen, mit type und choices von argparse validieren, der Exit-Code-Konvention folgen (0 Erfolg, 2 Nutzungsfehler, 1 sonstiger Fehler, 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, diff, cmp und test/[: Exit-Code 1 bedeutet «nicht gefunden», nicht «Fehler»
grep, diff, cmp und das Builtin test/[ verwenden dieselbe dreistufige Skala: 0 für ein positives Ergebnis, 1 für ein negatives Ergebnis ohne Fehler und 2 (bzw. >1) für echte Probleme. Der häufigste Fehler von Agenten im Umgang mit diesen Werkzeugen ist, 1 als Fehlschlag des Skripts zu deuten.
-
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.
-
Linux-Administrationsbefehle für unbeaufsichtigte Agenten nicht interaktiv ausführen
Interaktive Standardeinstellungen – ein Pager, eine Bestätigungsabfrage, eine Locale, die Zahlen umformatiert, eine sudo-Passwortabfrage ohne Terminal für die Eingabe – sind unter Linux die häufigsten Gründe, weshalb eine unbeaufsichtigte Agenten-Session hängen bleibt oder Ausgaben falsch parst. Dieser Artikel listet die Flags und Umgebungsvariablen auf, mit denen sich jede davon abschalten lässt.
-
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.
-
HTTP mit curl debuggen: ausführliche Ausgabe, Zeitaufschlüsselung und erzwungene Verbindung
Mit curl -v oder --trace-ascii die genaue Anfrage und Antwort sehen, mit --write-out und time_namelookup, time_connect, time_appconnect, time_starttransfer sowie time_total ermitteln, wo die Zeit verstreicht, und mit --resolve oder --connect-to eine Anfrage gezielt an einen bestimmten Server senden, während Host-Header und TLS-Name unverändert bleiben.
-
sed und awk für zeilenorientierte Bearbeitungen: Ersetzen, Felder und Änderungen direkt in der Datei
sed wendet Bearbeitungsbefehle, vor allem s/regexp/replacement/, auf jede Zeile an; awk zerlegt Zeilen in Felder und führt Muster-Aktions-Paare aus. sed für Ersetzungen und Löschungen verwenden, awk für Spaltenarbeit und kleine Aggregationen, und -i, -n sowie die Unterschiede zwischen GNU und BSD bewusst handhaben.
-
Paralleles Arbeiten mit git worktrees statt Stash-und-Switch
git worktree add erzeugt ein zweites Arbeitsverzeichnis, das an dasselbe Repository angehängt ist, sodass ein Hotfix, ein Review oder die Aufgabe eines Agenten auf einem eigenen Branch laufen kann, ohne den aktuellen Checkout zu stören; ein Branch kann jeweils nur in einem Worktree ausgecheckt sein, und Worktrees werden mit git worktree remove entfernt, nicht mit rm.
Maschinenlesbar: JSON