Přeskočit na obsah

Lekce 03.6: Spouštění bash příkazů (Running Bash Commands)

⏱️ 3 min čtení Lekce 03.6

🧠 Mentální model & teoretický rozbor

Nástroj Bash je tou nejmocnější a zároveň nejnebezpečnější zbraní v arzenálu kódovacího agenta. Na rozdíl od čtení souborů má spuštění bash příkazu vedlejší účinky (Side Effects) v reálném světě:

  • Může instalovat systémové balíčky.
  • Může odesílat síťové požadavky přes curl.
  • Může modifikovat databáze nebo smazat diskové oddíly.
KLASIFIKACE BASH PŘÍKAZŮ PRO AGENTA:
┌───────────────────────────┬─────────────────────────────────────────────┐
│ DISKRÉTNÍ / BEZPEČNÉ │ DLOUHOBĚŽÍCÍ / BLOKUJÍCÍ │
│ (Ideální pro agenta) │ (STRIKTNĚ ZAKÁZÁNO v sezení agenta) │
├───────────────────────────┼─────────────────────────────────────────────┤
│ • npm test -- auth.test │ • npm run dev / next dev (nikdy neskončí) │
│ • npx tsc --noEmit │ • docker compose up (bez přepínače -d) │
│ • git status / git diff │ • tail -f /var/log/server.log │
│ • curl localhost:3000/api │ • interaktivní CLI nástroje (nano, vim) │
└───────────────────────────┴─────────────────────────────────────────────┘

Agent potřebuje příkazy, které proběhnou, vygenerují výstup a skončí s návratovým kódem (Exit Code 0 = úspěch, cokoliv jiného = chyba).


🏢 Realistický scénář z praxe

Vývojář zadal agentovi: „Ověř, zda funguje frontend.“ Agent spustil: npm run dev.

  • Vývojový server Next.js nastartoval a začal čekat na požadavky na portu 3000.
  • Protože proces nikdy neskončil, CLI harness zablokoval své sezení a čekal na návratový kód.
  • Vývojář musel sezení přerušit přes Ctrl + C.
  • Správné inženýrské řešení: Dev server běží v samostatném terminálu vývojáře. Agent v sezení spouští pouze diskrétní test: pnpm vitest run nebo npx playwright test.

💻 Konkrétní ukázky kódu & promptů

Nastavení pravidel pro Bash v AGENTS.md (nebo CLAUDE.md):

## Pravidla pro terminál a Bash
1. Spouštěj VÝHRADNĚ diskrétní příkazy, které skončí do 30 sekund.
2. ZÁKAZ spouštění vývojových serverů (`pnpm dev`, `vite`, `nodemon`). Tyto procesy běží externě.
3. Výstupy testů vždy filtruj na konkrétní testovaný modul (např. `pnpm vitest run <cesta>`).
4. Nikdy nespouštěj příkazy vyžadující interaktivní uživatelský vstup v shellu (např. dotazy `Are you sure? (y/n)`).
Vždy použij přepínač pro tichý běh (např. `-y`, `--non-interactive`).

⚠️ Analýza selhání & Anti-patterns

Chyba: Spuštění interaktivního příkazu bez flagu pro potvrzení

Příklad: npm init nebo apt-get install <balik>. Příkaz se zastaví a čeká na stisk klávesy v terminálu. Protože harness toto rozhraní nemá jak obsloužit, sezení zamrzne.

  • Pravidlo: Vždy používejte neinteraktivní přepínače (npm init -y, rm -f).

🛠️ Inženýrský postup krok za krokem (Playbook)

  1. Mějte dlouhoběžící procesy (dev server, databázový docker) spuštěné ve vedlejším panelu terminálu.
  2. V sezení agenta (agy nebo claude) nechte spouštět pouze kompilaci, testy a jednorázové skripty.
  3. Pokud se agent zasekne na běžícím procesu, okamžitě stiskněte Ctrl + C.

🧪 Praktické cvičení (Hands-on Lab)

Úkol:

Otestujte chování agenta při spuštění terminálového příkazu s exit kódem.

Kroky:

  1. V agy nebo claude vyzvěte agenta: „Spusť v bashi příkaz, který selže s chybou: node -e 'process.exit(1)' a vysvětli mi výsledek.“
  2. Sledujte, jak harness zachytí nenulový exit kód a jak model zareaguje na chybu.
  3. Následně zadejte: „Spusť příkaz, který uspěje: node -e 'console.log("Vše v pořádku"); process.exit(0)'.