domains / / snyk/cli
defensive shell script configuration
Configure shell scripts with defensive practices to ensure reliability and debuggability. Use appropriate `set` options for error handling and debugging, implement safe defaults that require explicit opt-in for risky operations, and preserve execution state when changing directories.
Configure shell scripts with defensive practices to ensure reliability and debuggability. Use appropriate set options for error handling and debugging, implement safe defaults that require explicit opt-in for risky operations, and preserve execution state when changing directories.
Key practices:
- Use
set -exinstead of justset -eto output commands as they execute for better debugging - Default to safe behaviors and require explicit conditions for potentially risky operations (e.g., defaulting to dev releases and opting into stable releases only on exact matches)
- Preserve directory state using
pushd/popdinstead ofcdwhen temporary directory changes are needed - Document supported configuration values and their behaviors clearly
Example of defensive directory handling:
# Instead of:
cd "${PROJECT_PATH}"
pipenv install
# Use:
pushd "${PROJECT_PATH}"
pipenv install
popd
This approach prevents unintended side effects on subsequent script execution and makes scripts more predictable in different environments.