Shell Library Design
Library Guard
Load Once
Shell libraries often protect setup code with a guard flag. The guard makes repeated loading predictable by running initialization only once.
Program
Play the script to choose the guard state and see whether setup runs.
library_guard_flag.sh
#!/usr/bin/env bash
library_loaded=
if [[ "$library_loaded" -eq 0 ]]; then
library_loaded=1
status="loaded"
else
status="already-loaded"
fi
echo "$status"
#!/usr/bin/env bash
library_loaded=
if [[ "$library_loaded" -eq 0 ]]; then
library_loaded=1
status="loaded"
else
status="already-loaded"
fi
echo "$status"
guard flag
A guard flag records whether setup has already run.
idempotent load
Idempotent loading means repeated loads do not repeat setup work.
library setup
Library setup should be explicit and easy to skip when it has already happened.