Map openen
Kies de map met je script als werkmap; bestandsprogramma's zoals read_file en grep werken daarin. Bestandsprogramma's werken binnen die map, terwijl Shell, web en SSH daar niet toe beperkt zijn.
Een Bash-script kun je op drie manieren starten: met bash script.sh arg1 arg2, met ./script.sh na chmod +x (wat werkt door de shebang-line), of via de exec-builtin, die de shell vervangt en nooit terugkeert. De eerste vorm is het makkelijkst om mee te beginnen, omdat er geen rechtenwijziging nodig is. Shell voert de opdracht uit in de omgeving die je hebt gekozen, namelijk WSL op je pc of een Linux-systeem dat je bezit en via SSH bereikt, en de kaart in de chat toont de echte uitvoer en de exitcode. Jij bepaalt de argumenten, dus je kunt het normale geval en het falende geval in één gesprek testen. Mensen vragen vaak welke vorm je moet kiezen: gebruik bash script.sh tijdens het testen, omdat het werkt zelfs als het bestand geen execute-recht heeft, en schakel over naar ./script.sh zodra het script definitief is en begint met de shebang-line. Welke vorm je ook gebruikt, de exitstatus is hetzelfde getal, van 0 tot 255, en 0 betekent altijd dat het script succesvol is beëindigd.
Kies de map met je script als werkmap; bestandsprogramma's zoals read_file en grep werken daarin. Bestandsprogramma's werken binnen die map, terwijl Shell, web en SSH daar niet toe beperkt zijn.
Gebruik Ask first om elke wijziging als diff te zien, of Plan only om eerst een plan te lezen. Auto-run voert direct uit. Ask first pauzeert alleen voordat acties iets wijzigen.
Beschrijf de uitvoering in gewone woorden, bijvoorbeeld: voer het script uit met het argument test. Noem WSL of je server als je beide hebt. Noem het script en de argumenten precies zoals ze zijn.
Open de kaart om de uitvoer en de echte exitcode te zien, en accepteer of wijs een bewerking af. Een getal ongelijk aan 0 is informatief. Voer het opnieuw uit na elke geaccepteerde bewerking. Vergelijk het met het resultaat dat je verwachtte.
bash greet.sh testexit 0bash greet.shexit 2greet.shreadUsage1 match#!/usr/bin/env bash
# greet.sh - print a greeting a few times
set -eu
if [ "$#" -lt 1 ]; then
echo "Usage: $0 NAME [COUNT]" >&2
exit 2
fi
name="$1"
count="${2:-1}"
for i in $(seq 1 "$count"); do
echo "Hello, $name ($i)"
done
exit 0greet.sh stopt met een gebruiksinstructie en exitcode 2 als de naam ontbreekt, accepteert een optionele telling met een standaardwaarde van 1, en print alleen begroetingen in een lus. Lees het eerst regel voor regel voordat je het uitvoert: er is geen sudo, geen download en niets dat een bestand verplaatst of verwijdert, dus het is onschadelijk om te testen op elke machine die je bezit. Regel voor regel: de shebang noemt de interpreter, set -eu stopt bij fouten en ongedefinieerde variabelen, de test van $# telt de argumenten, en de for-lus echoot alleen.
Begin met een lege werkmap. Vraag de agent om het bovenstaande voorbeeld te schrijven, en write_file maakt greet.sh aan in die map. Open de kaart en lees het bestand regel voor regel: de eerste regel is de shebang die de interpreter noemt, set -eu stopt het script bij fouten en ongedefinieerde variabelen, en de check van $# beschermt de rest tegen een ontbrekende naam. Onder Ask first wacht het nieuwe bestand op je goedkeuring voordat het wordt weggeschreven. Er is nog niets uitgevoerd. De usage-tak van dit script kiest 2 voor verkeerd gebruik, wat een veelvoorkomende conventie is. Accepteer het bestand pas wanneer je elke regel begrijpt, en als dat niet zo is, vraag de agent dan om het uit te leggen. Een afgewezen bewerking laat de map onveranderd.
Mensen die zoeken naar “bash script uitvoeren” willen meestal één regel: bash greet.sh test. Vraag de agent om het uit te voeren, en Shell start de opdracht in de omgeving van je chat, zoals WSL, en stuurt de echte uitvoer en de echte exitcode terug. Vouw de kaart uit voor de volledige uitvoer. Vraag daarna om dezelfde uitvoering zonder het argument, en je zou de gebruiksinstructie en exitcode 2 moeten zien. De exitcode voor cli-toepassingen is een getal van 0 tot 255 dat de aanroeper leest, en 0 betekent succes. Exitcode 127 betekent dat een opdracht niet is gevonden en 126 betekent dat een bestand niet kan worden uitgevoerd, dus deze twee getallen wijzen op een typefout, een ontbrekend programma of een ontbrekend execute-recht.
read_file toont het script en grep vindt waar $1 en $2 worden gebruikt, zodat je kunt controleren of elk argument een standaardwaarde of een foutmelding heeft. Dit is hoe je optionele argumenten kunt parseren: het script loopt met getopts, en met slechts één of twee waarden zijn de gewone $1 en ${2:-1} genoeg. Aliassen met argumenten gedragen zich niet als functies, omdat een alias alleen het getypte woord vervangt door tekst, dus gebruik een functie wanneer waarden in het midden moeten staan. Vraag de agent om één ding te wijzigen, bijvoorbeeld de standaardwaarde van de telling, en lees de diff die edit_file toont. Voer het script daarna opnieuw uit en vergelijk de nieuwe exitcode met de oude. Plan only kan de parameters opsommen die het script begrijpt zonder iets uit te voeren.
Dezelfde stappen werken wanneer de werkomgeving een Linux-systeem is dat je bezit, bereikt via SSH. Bestandsprogramma's blijven werken in de werkmap van de chat, terwijl Shell-opdrachten worden uitgevoerd in de omgeving die je hebt gekozen, dus controleer naar welke omgeving een kaart verwijst. De exec-builtin, waar mensen naar zoeken als “bash exec script”, vervangt de shell door een andere opdracht en keert nooit terug, dus niets daarna wordt uitgevoerd en de exitcode is die van de nieuwe opdracht. Bewaar een kopie voordat een script bestanden verplaatst of verwijdert, voer het eerst uit met echo als een proefuitvoering, en gebruik alleen machines die je mag beheren. Lees de laatste kaart voordat je de chat sluit. Wanneer je alle waarden doorgeeft aan een andere opdracht, schrijf "$@" in dubbele aanhalingstekens zodat elke waarde zijn vorm behoudt.