🔎 "watch and repeat" - bash hack til at køre scripts ved ændringer

@mikkelrask · June 06, 2025 · 3 min read

AutoExecute in action
AutoExecute in action

"👆 One small hot reload, please"

Når man udvikler Bash-scripts, små CLI-værktøjer eller generelt bare arbejder i terminalen, kan det være en tidsrøver konstant at skulle genstarte sine scripts manuelt for hver lille ændring. Jeg kan ikke tælle hvor mange gange jeg har siddet og genopfrisket en side, efter at have foretaget ændringer, og været frustreret over at ikke kunne se dem, fordi jeg fx har glemt at genstarte min dev-server til mit js-framework e.l.

Derfor har jeg lavet et lille Bash-værktøj, der automatisk genkører et script eller kommando, så snart filen bliver ændret – med en simpel, men tilfredsstillende spinner-animering i bunden af terminalen.

⚒️ Hvad gør værktøjet?

Værktøjet, som jeg har kaldt ae (for AutoExecute) overvåger en given fil for ændringer og kører en kommando (som som standard bare eksekverer filen med bash) hver gang filen bliver modificeret. Det fungerer lidt som en "poor man's watch"-kommando, men specifikt til ændringer i en enkelt fil – og med live feedback.

Eksempel på brug:

ae script.sh

Nu bliver script.sh eksekveret hver gang du gemmer filen – super effektivt når du udvikler interaktive scripts eller arbejder med CLI-prototyper.

Du kan også angive en alternativ kommando der skal kaldes, hvis eks. filen du vil holde øje med, ikke er den der skal køres:

ae package.json "pnpm i && pnpm build"`

Kør ae uden argumenter, for at blive mindet om brugen

ae <file-to-watch> [optional-command-to-run]

 Funktionalitet

  • Overvåger en enkelt fil ved hjælp af stat -c %Y, som aflæser filens sidste ændringstid.
  • Har en lille spinner i bunden af terminalen, så man visuelt kan se at værktøjet er aktivt.
  • Eksekverer valgfri kommando ved ændringer – ideelt til scripts, men kan bruges til alt fra make til testkørsler.

💼 Use-cases

  • Script-udvikling: Når du eksperimenterer med små Bash-scripts og vil se outputtet med det samme uden at genstarte manuelt.
  • CLI-værktøjer: Hvis du bygger værktøjer i f.eks. Python, Bash eller Node.js og vil teste ændringer hurtigt.
  • Live preview af Markdown eller config-filer: Brug f.eks. mdcat, glow eller bat i kommandoen til at se ændringer i tekstfiler i realtid.

🤔 Hvorfor ikke bare bruge entr eller inotifywait?

Der findes tools som entr og inotify-tools, men de er ikke altid installeret som standard – og nogle gange vil man bare have ét Bash-script uden afhængigheder. Dette script kræver kun POSIX tools og fungerer out of the box på de fleste Unix-lignende systemer.


Et lille værktøj, som måske virker simpelt, men som hurtigt bliver en fast del af ens workflow, når man først har prøvet det.

📔 Dokumentation

ae er et af mine mange custom utils, som jeg prøver at blive bedre til at dele lidt ud af. Der er ingen som sådan dokumentation på det, da det er lidt self-explanatory, men kan findes i mit dotfiles repo på github, hvor det er under utils mappen. Hele repoet er lavet til at bruges med stow, og efter at have klonet repoet, kan de alle installeres i din lokale bin mappe ($HOME/.local/bin/) ved at kalde stow utils fra roden af repoet.

🔗 Links

 Hurtig download

wget -o ~/.local/bin/ae https://raw.githubusercontent.com/mikkelrask/dotfiles/refs/heads/main/utils/.local/bin/ae
chmod +x ~/.local/bin/ae
@mikkelrask
Computernørden. Hobby futurist, linux entusiast, hardware hacker, tinkerer og generelt kreativt legebarn. Bosat i Københavns Nordvest kvarter med min hund Homie. Jeg har arbejdet med computere hele mit liv, og ser en deres kunnen som en naturlig udvidelse af min egen.
© mr@github:~$ █, Built with Gatsby and hosted on Github.