Skip to content

large-shell-program

shell program contains at least 200 substantive lines

Why

Large shell programs lack the static type checking and structured interfaces available to application languages, making orchestration and domain logic harder to evolve safely.

Fix

Move substantive logic into a fully annotated Python CLI or module covered by Ruff, Sarj Python, and strict BasedPyright; retain only a thin shell adapter when the platform requires one.

Examples

Before — flagged A large shell program moves typed logic to Python
scripts/release.sh
#!/bin/sh
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
run_step
After — preferred A thin shell adapter remains at the platform boundary
scripts/release.sh
#!/bin/sh
exec python -m tools.release "$@"

Files

**/*.sh**/*.bash**/*.zshextensionless shell scripts