{"id":"cdfd1604-fdc6-4a7d-b99a-c58db9857555","shortId":"KBLpGL","kind":"skill","title":"bash-pro","tagline":"'Master of defensive Bash scripting for production automation, CI/CD","description":"## Use this skill when\n\n- Writing or reviewing Bash scripts for automation, CI/CD, or ops\n- Hardening shell scripts for safety and portability\n\n## Do not use this skill when\n\n- You need POSIX-only shell without Bash features\n- The task requires a higher-level language for complex logic\n- You need Windows-native scripting (PowerShell)\n\n## Instructions\n\n1. Define script inputs, outputs, and failure modes.\n2. Apply strict mode and safe argument parsing.\n3. Implement core logic with defensive patterns.\n4. Add tests and linting with Bats and ShellCheck.\n\n## Safety\n\n- Treat input as untrusted; avoid eval and unsafe globbing.\n- Prefer dry-run modes before destructive actions.\n\n## Focus Areas\n\n- Defensive programming with strict error handling\n- POSIX compliance and cross-platform portability\n- Safe argument parsing and input validation\n- Robust file operations and temporary resource management\n- Process orchestration and pipeline safety\n- Production-grade logging and error reporting\n- Comprehensive testing with Bats framework\n- Static analysis with ShellCheck and formatting with shfmt\n- Modern Bash 5.x features and best practices\n- CI/CD integration and automation workflows\n\n## Approach\n\n- Always use strict mode with `set -Eeuo pipefail` and proper error trapping\n- Quote all variable expansions to prevent word splitting and globbing issues\n- Prefer arrays and proper iteration over unsafe patterns like `for f in $(ls)`\n- Use `[[ ]]` for Bash conditionals, fall back to `[ ]` for POSIX compliance\n- Implement comprehensive argument parsing with `getopts` and usage functions\n- Create temporary files and directories safely with `mktemp` and cleanup traps\n- Prefer `printf` over `echo` for predictable output formatting\n- Use command substitution `$()` instead of backticks for readability\n- Implement structured logging with timestamps and configurable verbosity\n- Design scripts to be idempotent and support dry-run modes\n- Use `shopt -s inherit_errexit` for better error propagation in Bash 4.4+\n- Employ `IFS=$'\\n\\t'` to prevent unwanted word splitting on spaces\n- Validate inputs with `: \"${VAR:?message}\"` for required environment variables\n- End option parsing with `--` and use `rm -rf -- \"$dir\"` for safe operations\n- Support `--trace` mode with `set -x` opt-in for detailed debugging\n- Use `xargs -0` with NUL boundaries for safe subprocess orchestration\n- Employ `readarray`/`mapfile` for safe array population from command output\n- Implement robust script directory detection: `SCRIPT_DIR=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE[0]}\")\" && pwd -P)\"`\n- Use NUL-safe patterns: `find -print0 | while IFS= read -r -d '' file; do ...; done`\n\n## Compatibility & Portability\n\n- Use `#!/usr/bin/env bash` shebang for portability across systems\n- Check Bash version at script start: `(( BASH_VERSINFO[0] >= 4 && BASH_VERSINFO[1] >= 4 ))` for Bash 4.4+ features\n- Validate required external commands exist: `command -v jq &>/dev/null || exit 1`\n- Detect platform differences: `case \"$(uname -s)\" in Linux*) ... ;; Darwin*) ... ;; esac`\n- Handle GNU vs BSD tool differences (e.g., `sed -i` vs `sed -i ''`)\n- Test scripts on all target platforms (Linux, macOS, BSD variants)\n- Document minimum version requirements in script header comments\n- Provide fallback implementations for platform-specific features\n- Use built-in Bash features over external commands when possible for portability\n- Avoid bashisms when POSIX compliance is required, document when using Bash-specific features\n\n## Readability & Maintainability\n\n- Use long-form options in scripts for clarity: `--verbose` instead of `-v`\n- Employ consistent naming: snake_case for functions/variables, UPPER_CASE for constants\n- Add section headers with comment blocks to organize related functions\n- Keep functions under 50 lines; refactor larger functions into smaller components\n- Group related functions together with descriptive section headers\n- Use descriptive function names that explain purpose: `validate_input_file` not `check_file`\n- Add inline comments for non-obvious logic, avoid stating the obvious\n- Maintain consistent indentation (2 or 4 spaces, never tabs mixed with spaces)\n- Place opening braces on same line for consistency: `function_name() {`\n- Use blank lines to separate logical blocks within functions\n- Document function parameters and return values in header comments\n- Extract magic numbers and strings to named constants at top of script\n\n## Safety & Security Patterns\n\n- Declare constants with `readonly` to prevent accidental modification\n- Use `local` keyword for all function variables to avoid polluting global scope\n- Implement `timeout` for external commands: `timeout 30s curl ...` prevents hangs\n- Validate file permissions before operations: `[[ -r \"$file\" ]] || exit 1`\n- Use process substitution `<(command)` instead of temporary files when possible\n- Sanitize user input before using in commands or file operations\n- Validate numeric input with pattern matching: `[[ $num =~ ^[0-9]+$ ]]`\n- Never use `eval` on user input; use arrays for dynamic command construction\n- Set restrictive umask for sensitive operations: `(umask 077; touch \"$secure_file\")`\n- Log security-relevant operations (authentication, privilege changes, file access)\n- Use `--` to separate options from arguments: `rm -rf -- \"$user_input\"`\n- Validate environment variables before using: `: \"${REQUIRED_VAR:?not set}\"`\n- Check exit codes of all security-critical operations explicitly\n- Use `trap` to ensure cleanup happens even on abnormal exit\n\n## Performance Optimization\n\n- Avoid subshells in loops; use `while read` instead of `for i in $(cat file)`\n- Use Bash built-ins over external commands: `[[ ]]` instead of `test`, `${var//pattern/replacement}` instead of `sed`\n- Batch operations instead of repeated single operations (e.g., one `sed` with multiple expressions)\n- Use `mapfile`/`readarray` for efficient array population from command output\n- Avoid repeated command substitutions; store result in variable once\n- Use arithmetic expansion `$(( ))` instead of `expr` for calculations\n- Prefer `printf` over `echo` for formatted output (faster and more reliable)\n- Use associative arrays for lookups instead of repeated grepping\n- Process files line-by-line for large files instead of loading entire file into memory\n- Use `xargs -P` for parallel processing when operations are independent\n\n## Documentation Standards\n\n- Implement `--help` and `-h` flags showing usage, options, and examples\n- Provide `--version` flag displaying script version and copyright information\n- Include usage examples in help output for common use cases\n- Document all command-line options with descriptions of their purpose\n- List required vs optional arguments clearly in usage message\n- Document exit codes: 0 for success, 1 for general errors, specific codes for specific failures\n- Include prerequisites section listing required commands and versions\n- Add header comment block with script purpose, author, and modification date\n- Document environment variables the script uses or requires\n- Provide troubleshooting section in help for common issues\n- Generate documentation with `shdoc` from special comment formats\n- Create man pages using `shellman` for system integration\n- Include architecture diagrams using Mermaid or GraphViz for complex scripts\n\n## Modern Bash Features (5.x)\n\n- **Bash 5.0**: Associative array improvements, `${var@U}` uppercase conversion, `${var@L}` lowercase\n- **Bash 5.1**: Enhanced `${parameter@operator}` transformations, `compat` shopt options for compatibility\n- **Bash 5.2**: `varredir_close` option, improved `exec` error handling, `EPOCHREALTIME` microsecond precision\n- Check version before using modern features: `[[ ${BASH_VERSINFO[0]} -ge 5 && ${BASH_VERSINFO[1]} -ge 2 ]]`\n- Use `${parameter@Q}` for shell-quoted output (Bash 4.4+)\n- Use `${parameter@E}` for escape sequence expansion (Bash 4.4+)\n- Use `${parameter@P}` for prompt expansion (Bash 4.4+)\n- Use `${parameter@A}` for assignment format (Bash 4.4+)\n- Employ `wait -n` to wait for any background job (Bash 4.3+)\n- Use `mapfile -d delim` for custom delimiters (Bash 4.4+)\n\n## CI/CD Integration\n\n- **GitHub Actions**: Use `shellcheck-problem-matchers` for inline annotations\n- **Pre-commit hooks**: Configure `.pre-commit-config.yaml` with `shellcheck`, `shfmt`, `checkbashisms`\n- **Matrix testing**: Test across Bash 4.4, 5.0, 5.1, 5.2 on Linux and macOS\n- **Container testing**: Use official bash:5.2 Docker images for reproducible tests\n- **CodeQL**: Enable shell script scanning for security vulnerabilities\n- **Actionlint**: Validate GitHub Actions workflow files that use shell scripts\n- **Automated releases**: Tag versions and generate changelogs automatically\n- **Coverage reporting**: Track test coverage and fail on regressions\n- Example workflow: `shellcheck *.sh && shfmt -d *.sh && bats test/`\n\n## Security Scanning & Hardening\n\n- **SAST**: Integrate Semgrep with custom rules for shell-specific vulnerabilities\n- **Secrets detection**: Use `gitleaks` or `trufflehog` to prevent credential leaks\n- **Supply chain**: Verify checksums of sourced external scripts\n- **Sandboxing**: Run untrusted scripts in containers with restricted privileges\n- **SBOM**: Document dependencies and external tools for compliance\n- **Security linting**: Use ShellCheck with security-focused rules enabled\n- **Privilege analysis**: Audit scripts for unnecessary root/sudo requirements\n- **Input sanitization**: Validate all external inputs against allowlists\n- **Audit logging**: Log all security-relevant operations to syslog\n- **Container security**: Scan script execution environments for vulnerabilities\n\n## Observability & Logging\n\n- **Structured logging**: Output JSON for log aggregation systems\n- **Log levels**: Implement DEBUG, INFO, WARN, ERROR with configurable verbosity\n- **Syslog integration**: Use `logger` command for system log integration\n- **Distributed tracing**: Add trace IDs for multi-script workflow correlation\n- **Metrics export**: Output Prometheus-format metrics for monitoring\n- **Error context**: Include stack traces, environment info in error logs\n- **Log rotation**: Configure log file rotation for long-running scripts\n- **Performance metrics**: Track execution time, resource usage, external call latency\n- Example: `log_info() { logger -t \"$SCRIPT_NAME\" -p user.info \"$*\"; echo \"[INFO] $*\" >&2; }`\n\n## Quality Checklist\n\n- Scripts pass ShellCheck static analysis with minimal suppressions\n- Code is formatted consistently with shfmt using standard options\n- Comprehensive test coverage with Bats including edge cases\n- All variable expansions are properly quoted\n- Error handling covers all failure modes with meaningful messages\n- Temporary resources are cleaned up properly with EXIT traps\n- Scripts support `--help` and provide clear usage information\n- Input validation prevents injection attacks and handles edge cases\n- Scripts are portable across target platforms (Linux, macOS)\n- Performance is adequate for expected workloads and data sizes\n\n## Output\n\n- Production-ready Bash scripts with defensive programming practices\n- Comprehensive test suites using bats-core or shellspec with TAP output\n- CI/CD pipeline configurations (GitHub Actions, GitLab CI) for automated testing\n- Documentation generated with shdoc and man pages with shellman\n- Structured project layout with reusable library functions and dependency management\n- Static analysis configuration files (.shellcheckrc, .shfmt.toml, .editorconfig)\n- Performance benchmarks and profiling reports for critical workflows\n- Security review with SAST, secrets scanning, and vulnerability reports\n- Debugging utilities with trace modes, structured logging, and observability\n- Migration guides for Bash 3→5 upgrades and legacy modernization\n- Package distribution configurations (Homebrew formulas, deb/rpm specs)\n- Container images for reproducible execution environments\n\n## Essential Tools\n\n### Static Analysis & Formatting\n- **ShellCheck**: Static analyzer with `enable=all` and `external-sources=true` configuration\n- **shfmt**: Shell script formatter with standard config (`-i 2 -ci -bn -sr -kp`)\n- **checkbashisms**: Detect bash-specific constructs for portability analysis\n- **Semgrep**: SAST with custom rules for shell-specific security issues\n- **CodeQL**: GitHub's security scanning for shell scripts\n\n### Testing Frameworks\n- **bats-core**: Maintained fork of Bats with modern features and active development\n- **shellspec**: BDD-style testing framework with rich assertions and mocking\n- **shunit2**: xUnit-style testing framework for shell scripts\n- **bashing**: Testing framework with mocking support and test isolation\n\n### Modern Development Tools\n- **bashly**: CLI framework generator for building command-line applications\n- **basher**: Bash package manager for dependency management\n- **bpkg**: Alternative bash package manager with npm-like interface\n- **shdoc**: Generate markdown documentation from shell script comments\n- **shellman**: Generate man pages from shell scripts\n\n### CI/CD & Automation\n- **pre-commit**: Multi-language pre-commit hook framework\n- **actionlint**: GitHub Actions workflow linter\n- **gitleaks**: Secrets scanning to prevent credential leaks\n- **Makefile**: Automation for lint, format, test, and release workflows\n\n## Common Pitfalls to Avoid\n\n- `for f in $(ls ...)` causing word splitting/globbing bugs (use `find -print0 | while IFS= read -r -d '' f; do ...; done`)\n- Unquoted variable expansions leading to unexpected behavior\n- Relying on `set -e` without proper error trapping in complex flows\n- Using `echo` for data output (prefer `printf` for reliability)\n- Missing cleanup traps for temporary files and directories\n- Unsafe array population (use `readarray`/`mapfile` instead of command substitution)\n- Ignoring binary-safe file handling (always consider NUL separators for filenames)\n\n## Dependency Management\n\n- **Package managers**: Use `basher` or `bpkg` for installing shell script dependencies\n- **Vendoring**: Copy dependencies into project for reproducible builds\n- **Lock files**: Document exact versions of dependencies used\n- **Checksum verification**: Verify integrity of sourced external scripts\n- **Version pinning**: Lock dependencies to specific versions to prevent breaking changes\n- **Dependency isolation**: Use separate directories for different dependency sets\n- **Update automation**: Automate dependency updates with Dependabot or Renovate\n- **Security scanning**: Scan dependencies for known vulnerabilities\n- Example: `basher install username/repo@version` or `bpkg install username/repo -g`\n\n## Advanced Techniques\n\n- **Error Context**: Use `trap 'echo \"Error at line $LINENO: exit $?\" >&2' ERR` for debugging\n- **Safe Temp Handling**: `trap 'rm -rf \"$tmpdir\"' EXIT; tmpdir=$(mktemp -d)`\n- **Version Checking**: `(( BASH_VERSINFO[0] >= 5 ))` before using modern features\n- **Binary-Safe Arrays**: `readarray -d '' files < <(find . -print0)`\n- **Function Returns**: Use `declare -g result` for returning complex data from functions\n- **Associative Arrays**: `declare -A config=([host]=\"localhost\" [port]=\"8080\")` for complex data structures\n- **Parameter Expansion**: `${filename%.sh}` remove extension, `${path##*/}` basename, `${text//old/new}` replace all\n- **Signal Handling**: `trap cleanup_function SIGHUP SIGINT SIGTERM` for graceful shutdown\n- **Command Grouping**: `{ cmd1; cmd2; } > output.log` share redirection, `( cd dir && cmd )` use subshell for isolation\n- **Co-processes**: `coproc proc { cmd; }; echo \"data\" >&\"${proc[1]}\"; read -u \"${proc[0]}\" result` for bidirectional pipes\n- **Here-documents**: `cat <<-'EOF'` with `-` strips leading tabs, quotes prevent expansion\n- **Process Management**: `wait $pid` to wait for background job, `jobs -p` list background PIDs\n- **Conditional Execution**: `cmd1 && cmd2` run cmd2 only if cmd1 succeeds, `cmd1 || cmd2` run cmd2 if cmd1 fails\n- **Brace Expansion**: `touch file{1..10}.txt` creates multiple files efficiently\n- **Nameref Variables**: `declare -n ref=varname` creates reference to another variable (Bash 4.3+)\n- **Improved Error Trapping**: `set -Eeuo pipefail; shopt -s inherit_errexit` for comprehensive error handling\n- **Parallel Execution**: `xargs -P $(nproc) -n 1 command` for parallel processing with CPU core count\n- **Structured Output**: `jq -n --arg key \"$value\" '{key: $key}'` for JSON generation\n- **Performance Profiling**: Use `time -v` for detailed resource usage or `TIMEFORMAT` for custom timing\n\n## References & Further Reading\n\n### Style Guides & Best Practices\n- [Google Shell Style Guide](https://google.github.io/styleguide/shellguide.html) - Comprehensive style guide covering quoting, arrays, and when to use shell\n- [Bash Pitfalls](https://mywiki.wooledge.org/BashPitfalls) - Catalog of common Bash mistakes and how to avoid them\n- [Bash Hackers Wiki](https://wiki.bash-hackers.org/) - Comprehensive Bash documentation and advanced techniques\n- [Defensive BASH Programming](https://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming/) - Modern defensive programming patterns\n\n### Tools & Frameworks\n- [ShellCheck](https://github.com/koalaman/shellcheck) - Static analysis tool and extensive wiki documentation\n- [shfmt](https://github.com/mvdan/sh) - Shell script formatter with detailed flag documentation\n- [bats-core](https://github.com/bats-core/bats-core) - Maintained Bash testing framework\n- [shellspec](https://github.com/shellspec/shellspec) - BDD-style testing framework for shell scripts\n- [bashly](https://bashly.dannyb.co/) - Modern Bash CLI framework generator\n- [shdoc](https://github.com/reconquest/shdoc) - Documentation generator for shell scripts\n\n### Security & Advanced Topics\n- [Bash Security Best Practices](https://github.com/carlospolop/PEASS-ng) - Security-focused shell script patterns\n- [Awesome Bash](https://github.com/awesome-lists/awesome-bash) - Curated list of Bash resources and tools\n- [Pure Bash Bible](https://github.com/dylanaraps/pure-bash-bible) - Collection of pure bash alternatives to external commands\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["bash","pro","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-bash-pro","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/bash-pro","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (18,425 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:35.581Z","embedding":null,"createdAt":"2026-04-18T21:33:25.494Z","updatedAt":"2026-04-24T18:50:35.581Z","lastSeenAt":"2026-04-24T18:50:35.581Z","tsv":"'-0':344 '-9':707 '/)':2240,2306 '/awesome-lists/awesome-bash)':2341 '/bashpitfalls)':2224 '/bats-core/bats-core)':2286 '/blog/2012/11/14/defensive-bash-programming/)':2252 '/carlospolop/peass-ng)':2330 '/dev/null':427 '/dylanaraps/pure-bash-bible)':2354 '/koalaman/shellcheck)':2262 '/mvdan/sh)':2273 '/old/new':2027 '/pattern/replacement':808 '/reconquest/shdoc)':2315 '/shellspec/shellspec)':2294 '/styleguide/shellguide.html)':2208 '/usr/bin/env':394 '0':373,409,706,952,1073,1978,2068 '077':727 '1':68,413,429,678,955,1078,2064,2120,2160 '10':2121 '2':76,588,1080,1410,1628,1959 '3':84,1584 '30s':666 '4':91,410,414,590 '4.3':1126,2139 '4.4':297,417,1090,1099,1107,1115,1135,1163 '5':173,1028,1075,1585,1979 '5.0':1031,1164 '5.1':1043,1165 '5.2':1054,1166,1176 '50':544 '8080':2013 'abnorm':778 'access':740 'accident':646 'across':399,1161,1482 'action':117,1139,1193,1522,1765 'actionlint':1190,1763 'activ':1674 'add':92,531,573,972,1350 'adequ':1489 'advanc':1947,2245,2322 'aggreg':1327 'allowlist':1300 'altern':1726,2359 'alway':185,1858 'analysi':164,1286,1417,1548,1606,1641,2264 'analyz':1610 'annot':1147 'anoth':2136 'appli':77 'applic':1717 'approach':184 'architectur':1016 'area':119 'arg':2173 'argument':82,134,233,746,944 'arithmet':845 'array':209,357,715,830,865,1033,1843,1987,2006,2214 'ask':2396 'assert':1684 'assign':1112 'associ':864,1032,2005 'attack':1474 'audit':1287,1301 'authent':736 'author':979 'autom':11,23,182,1200,1526,1751,1776,1922,1923 'automat':1207 'avoid':105,491,581,656,782,835,1787,2233 'awesom':2337 'back':226 'background':1123,2092,2097 'backtick':264 'basenam':2025 'bash':2,7,20,47,172,223,296,371,395,402,407,411,416,482,502,797,1026,1030,1042,1053,1071,1076,1089,1098,1106,1114,1125,1134,1162,1175,1500,1583,1636,1696,1708,1719,1727,1976,2138,2220,2228,2235,2242,2248,2288,2303,2308,2324,2338,2345,2350,2358 'bash-pro':1 'bash-specif':501,1635 'basher':1718,1869,1938 'bashism':492 'bashly.dannyb.co':2305 'bashly.dannyb.co/)':2304 'bat':97,161,1224,1434,1511,1664,1669,2282 'batch':812 'bats-cor':1510,1663,2281 'bdd':1678,2296 'bdd-style':1677,2295 'behavior':1813 'benchmark':1555 'best':177,2200,2326 'better':292 'bibl':2351 'bidirect':2071 'binari':1854,1985 'binary-saf':1853,1984 'blank':608 'block':536,613,975 'bn':1630 'boundari':347,2404 'bpkg':1725,1871,1943 'brace':599,2116 'break':1910 'bsd':443,460 'bug':1795 'build':1713,1884 'built':480,799 'built-in':479,798 'calcul':851 'call':1397 'case':433,524,528,928,1437,1478 'cat':794,2076 'catalog':2225 'caus':1792 'cd':369,2048 'chain':1251 'chang':738,1911 'changelog':1206 'check':401,571,760,1065,1975 'checkbash':1157,1633 'checklist':1412 'checksum':1253,1893 'ci':1524,1629 'ci/cd':12,24,179,1136,1518,1750 'clarif':2398 'clariti':515 'clean':1456 'cleanup':249,774,1835,2033 'clear':945,1467,2371 'cli':1709,2309 'close':1056 'cmd':2050,2060 'cmd1':2043,2101,2107,2109,2114 'cmd2':2044,2102,2104,2110,2112 'co':2056 'co-process':2055 'code':762,951,960,1421 'codeql':1182,1653 'collect':2355 'command':260,360,422,424,486,664,682,695,718,803,833,837,932,969,1343,1715,1850,2041,2161,2362 'command-lin':931,1714 'comment':469,535,575,624,974,1005,1742 'commit':1150,1754,1760 'common':926,997,1784,2227 'compat':391,1048,1052 'complex':58,1023,1823,2001,2015 'complianc':127,230,495,1274 'compon':551 'comprehens':158,232,1430,1506,2151,2209,2241 'condit':224,2099 'config':1626,2009 'configur':273,1152,1337,1380,1520,1549,1592,1619 'consid':1859 'consist':521,586,604,1424 'constant':530,632,641 'construct':719,1638 'contain':1171,1263,1311,1597 'context':1369,1950 'convers':1038 'copi':1878 'coproc':2058 'copyright':917 'core':86,1512,1665,2167,2283 'correl':1358 'count':2168 'cover':1446,2212 'coverag':1208,1212,1432 'cpu':2166 'creat':240,1007,2123,2133 'credenti':1248,1773 'criteria':2407 'critic':767,1560 'cross':130 'cross-platform':129 'curat':2342 'curl':667 'custom':1132,1233,1645,2193 'd':387,1129,1222,1803,1973,1989 'darwin':438 'data':1494,1828,2002,2016,2062 'date':982 'deb/rpm':1595 'debug':341,1332,1571,1962 'declar':640,1996,2007,2129 'defens':6,89,120,1503,2247,2254 'defin':69 'delim':1130 'delimit':1133 'depend':1269,1545,1723,1864,1876,1879,1891,1904,1912,1919,1924,1933 'dependabot':1927 'describ':2375 'descript':557,561,936 'design':275 'destruct':116 'detail':340,2187,2278 'detect':366,430,1241,1634 'develop':1675,1706 'diagram':1017 'differ':432,445,1918 'dir':326,368,2049 'directori':244,365,1841,1916 'dirnam':370 'display':913 'distribut':1348,1591 'docker':1177 'document':462,498,616,898,929,949,983,1000,1268,1528,1738,1887,2075,2243,2269,2280,2316 'done':390,1806 'dri':112,283 'dry-run':111,282 'dynam':717 'e':1093,1817 'e.g':446,819 'echo':254,855,1408,1826,1953,2061 'edg':1436,1477 'editorconfig':1553 'eeuo':191,2144 'effici':829,2126 'employ':298,352,520,1116 'enabl':1183,1284,1612 'end':318 'enhanc':1044 'ensur':773 'entir':884 'environ':316,752,984,1316,1373,1602,2387 'environment-specif':2386 'eof':2077 'epochrealtim':1062 'err':1960 'errexit':290,2149 'error':124,156,195,293,958,1060,1335,1368,1376,1444,1820,1949,1954,2141,2152 'esac':439 'escap':1095 'essenti':1603 'eval':106,710 'even':776 'exact':1888 'exampl':909,921,1217,1399,1937 'exec':1059 'execut':1315,1392,1601,2100,2155 'exist':423 'exit':428,677,761,779,950,1460,1958,1970 'expans':200,846,1097,1105,1440,1809,2019,2084,2117 'expect':1491 'expert':2392 'explain':565 'explicit':769 'export':1360 'expr':849 'express':824 'extens':2023,2267 'extern':421,485,663,802,1256,1271,1297,1396,1616,1899,2361 'external-sourc':1615 'extract':625 'f':218,1789,1804 'fail':1214,2115 'failur':74,963,1448 'fall':225 'fallback':471 'faster':859 'featur':48,175,418,477,483,504,1027,1070,1672,1983 'file':140,242,388,569,572,671,676,686,697,730,739,795,873,880,885,1195,1382,1550,1839,1856,1886,1990,2119,2125 'filenam':1863,2020 'find':381,1797,1991 'flag':904,912,2279 'flow':1824 'focus':118,1282,2333 'fork':1667 'form':510 'format':168,258,857,1006,1113,1364,1423,1607,1779 'formatt':1623,2276 'formula':1594 'framework':162,1662,1681,1692,1698,1710,1762,2258,2290,2299,2310 'function':239,540,542,548,554,562,605,615,617,653,1543,1993,2004,2034 'functions/variables':526 'g':1946,1997 'ge':1074,1079 'general':957 'generat':999,1205,1529,1711,1736,1744,2180,2311,2317 'getopt':236 'github':1138,1192,1521,1654,1764 'github.com':2261,2272,2285,2293,2314,2329,2340,2353 'github.com/awesome-lists/awesome-bash)':2339 'github.com/bats-core/bats-core)':2284 'github.com/carlospolop/peass-ng)':2328 'github.com/dylanaraps/pure-bash-bible)':2352 'github.com/koalaman/shellcheck)':2260 'github.com/mvdan/sh)':2271 'github.com/reconquest/shdoc)':2313 'github.com/shellspec/shellspec)':2292 'gitlab':1523 'gitleak':1243,1768 'glob':109,206 'global':658 'gnu':441 'googl':2202 'google.github.io':2207 'google.github.io/styleguide/shellguide.html)':2206 'grace':2039 'grade':153 'graphviz':1021 'grep':871 'group':552,2042 'guid':1581,2199,2205,2211 'h':903 'hacker':2236 'handl':125,440,1061,1445,1476,1857,1965,2031,2153 'hang':669 'happen':775 'harden':27,1228 'header':468,533,559,623,973 'help':901,923,995,1464 'here-docu':2073 'higher':54 'higher-level':53 'homebrew':1593 'hook':1151,1761 'host':2010 'id':1352 'idempot':279 'if':299,384,1800 'ignor':1852 'imag':1178,1598 'implement':85,231,267,362,472,660,900,1331 'improv':1034,1058,2140 'in':800 'includ':919,964,1015,1370,1435 'indent':587 'independ':897 'info':1333,1374,1401,1409 'inform':918,1469 'inherit':289,2148 'inject':1473 'inlin':574,1146 'input':71,102,137,310,568,691,701,713,750,1293,1298,1470,2401 'instal':1873,1939,1944 'instead':262,517,683,789,804,809,814,847,868,881,1848 'instruct':67 'integr':180,1014,1137,1230,1340,1347,1896 'interfac':1734 'isol':1704,1913,2054 'issu':207,998,1652 'iter':212 'job':1124,2093,2094 'jq':426,2171 'json':1324,2179 'keep':541 'key':2174,2176,2177 'keyword':650 'known':1935 'kp':1632 'l':1040 'languag':56,1757 'larg':879 'larger':547 'latenc':1398 'layout':1539 'lead':1810,2080 'leak':1249,1774 'legaci':1588 'level':55,1330 'librari':1542 'like':216,1733 'limit':2363 'line':545,602,609,875,877,933,1716,1956 'line-by-lin':874 'lineno':1957 'lint':95,1276,1778 'linter':1767 'linux':437,458,1168,1485 'list':940,967,2096,2343 'load':883 'local':649 'localhost':2011 'lock':1885,1903 'log':154,269,731,1302,1303,1320,1322,1326,1329,1346,1377,1378,1381,1400,1577 'logger':1342,1402 'logic':59,87,580,612 'long':509,1386 'long-form':508 'long-run':1385 'lookup':867 'loop':785 'lowercas':1041 'ls':220,1791 'maco':459,1170,1486 'magic':626 'maintain':506,585,1666,2287 'makefil':1775 'man':1008,1533,1745 'manag':145,1546,1721,1724,1729,1865,1867,2086 'mapfil':354,826,1128,1847 'markdown':1737 'master':4 'match':704,2372 'matcher':1144 'matrix':1158 'meaning':1451 'memori':887 'mermaid':1019 'messag':313,948,1452 'metric':1359,1365,1390 'microsecond':1063 'migrat':1580 'minim':1419 'minimum':463 'miss':1834,2409 'mistak':2229 'mix':594 'mktemp':247,1972 'mock':1686,1700 'mode':75,79,114,188,285,332,1449,1575 'modern':171,1025,1069,1589,1671,1705,1982,2253,2307 'modif':647,981 'monitor':1367 'multi':1355,1756 'multi-languag':1755 'multi-script':1354 'multipl':823,2124 'mywiki.wooledge.org':2223 'mywiki.wooledge.org/bashpitfalls)':2222 'n':300,1118,2130,2159,2172 'name':522,563,606,631,1405 'nameref':2127 'nativ':64 'need':41,61 'never':592,708 'non':578 'non-obvi':577 'npm':1732 'npm-like':1731 'nproc':2158 'nul':346,378,1860 'nul-saf':377 'num':705 'number':627 'numer':700 'observ':1319,1579 'obvious':579,584 'offici':1174 'one':820 'op':26 'open':598 'oper':141,329,674,698,725,735,768,813,818,895,1046,1308 'opt':337 'opt-in':336 'optim':781 'option':319,511,744,907,934,943,1050,1057,1429 'orchestr':147,351 'organ':538 'output':72,257,361,834,858,924,1088,1323,1361,1496,1517,1829,2170,2381 'output.log':2045 'p':375,890,1102,1406,2095,2157 'packag':1590,1720,1728,1866 'page':1009,1534,1746 'parallel':892,2154,2163 'paramet':618,1045,1082,1092,1101,1109,2018 'pars':83,135,234,320 'pass':1414 'path':2024 'pattern':90,215,380,639,703,2256,2336 'perform':780,1389,1487,1554,2181 'permiss':672,2402 'pid':2088,2098 'pin':1902 'pipe':2072 'pipefail':192,2145 'pipelin':149,1519 'pitfal':1785,2221 'place':597 'platform':131,431,457,475,1484 'platform-specif':474 'pollut':657 'popul':358,831,1844 'port':2012 'portabl':33,132,392,398,490,1481,1640 'posix':43,126,229,494 'posix-on':42 'possibl':488,688 'powershel':66 'practic':178,1505,2201,2327 'pre':1149,1753,1759 'pre-commit':1148,1752,1758 'pre-commit-config.yaml':1153 'precis':1064 'predict':256 'prefer':110,208,251,852,1830 'prerequisit':965 'prevent':202,303,645,668,1247,1472,1772,1909,2083 'print0':382,1798,1992 'printf':252,853,1831 'privileg':737,1266,1285 'pro':3 'problem':1143 'proc':2059,2063,2067 'process':146,680,872,893,2057,2085,2164 'product':10,152,1498 'production-grad':151 'production-readi':1497 'profil':1557,2182 'program':121,1504,2249,2255 'project':1538,1881 'prometheus':1363 'prometheus-format':1362 'prompt':1104 'propag':294 'proper':194,211,1442,1458,1819 'provid':470,910,991,1466 'pure':2349,2357 'purpos':566,939,978 'pwd':374 'q':1083 'qualiti':1411 'quot':197,1087,1443,2082,2213 'r':386,675,1802 'read':385,788,1801,2065,2197 'readabl':266,505 'readarray':353,827,1846,1988 'readi':1499 'readon':643 'redirect':2047 'ref':2131 'refactor':546 'refer':2134,2195 'regress':1216 'relat':539,553 'releas':1201,1782 'relev':734,1307 'reli':1814 'reliabl':862,1833 'remov':2022 'renov':1929 'repeat':816,836,870 'replac':2028 'report':157,1209,1558,1570 'reproduc':1180,1600,1883 'requir':51,315,420,465,497,756,941,968,990,1292,2400 'resourc':144,1394,1454,2188,2346 'restrict':721,1265 'result':840,1998,2069 'return':620,1994,2000 'reusabl':1541 'review':19,1563,2393 'rf':325,748,1968 'rich':1683 'rm':324,747,1967 'robust':139,363 'root/sudo':1291 'rotat':1379,1383 'rule':1234,1283,1646 'run':113,284,1259,1387,2103,2111 'safe':81,133,245,328,349,356,379,1855,1963,1986 'safeti':31,100,150,637,2403 'sandbox':1258 'sanit':689,1294 'sast':1229,1565,1643 'sbom':1267 'scan':1186,1227,1313,1567,1657,1770,1931,1932 'scope':659,2374 'script':8,21,29,65,70,276,364,367,405,453,467,513,636,914,977,987,1024,1185,1199,1257,1261,1288,1314,1356,1388,1404,1413,1462,1479,1501,1622,1660,1695,1741,1749,1875,1900,2275,2302,2320,2335 'secret':1240,1566,1769 'section':532,558,966,993 'secur':638,729,733,766,1188,1226,1275,1281,1306,1312,1562,1651,1656,1930,2321,2325,2332 'security-crit':765 'security-focus':1280,2331 'security-relev':732,1305 'sed':447,450,811,821 'semgrep':1231,1642 'sensit':724 'separ':611,743,1861,1915 'sequenc':1096 'set':190,334,720,759,1816,1920,2143 'sh':1220,1223,2021 'share':2046 'shdoc':1002,1531,1735,2312 'shebang':396 'shell':28,45,1086,1184,1198,1237,1621,1649,1659,1694,1740,1748,1874,2203,2219,2274,2301,2319,2334 'shell-quot':1085 'shell-specif':1236,1648 'shellcheck':99,166,1142,1155,1219,1278,1415,1608,2259 'shellcheck-problem-match':1141 'shellcheckrc':1551 'shellman':1011,1536,1743 'shellspec':1514,1676,2291 'shfmt':170,1156,1221,1426,1620,2270 'shfmt.toml':1552 'shopt':287,1049,2146 'show':905 'shunit2':1687 'shutdown':2040 'sighup':2035 'sigint':2036 'signal':2030 'sigterm':2037 'singl':817 'size':1495 'skill':15,38,2366 'skill-bash-pro' 'smaller':550 'snake':523 'sourc':372,1255,1617,1898 'source-sickn33' 'space':308,591,596 'spec':1596 'special':1004 'specif':476,503,959,962,1238,1637,1650,1906,2388 'split':204,306 'splitting/globbing':1794 'sr':1631 'stack':1371 'standard':899,1428,1625 'start':406 'state':582 'static':163,1416,1547,1605,1609,2263 'stop':2394 'store':839 'strict':78,123,187 'string':629 'strip':2079 'structur':268,1321,1537,1576,2017,2169 'style':1679,1690,2198,2204,2210,2297 'subprocess':350 'subshel':783,2052 'substitut':261,681,838,1851,2384 'succeed':2108 'success':954,2406 'suit':1508 'suppli':1250 'support':281,330,1463,1701 'suppress':1420 'syslog':1310,1339 'system':400,1013,1328,1345 'tab':593,2081 'tag':1202 'tap':1516 'target':456,1483 'task':50,2370 'techniqu':1948,2246 'temp':1964 'temporari':143,241,685,1453,1838 'test':93,159,452,806,1159,1160,1172,1181,1211,1225,1431,1507,1527,1661,1680,1691,1697,1703,1780,2289,2298,2390 'text':2026 'time':1393,2184,2194 'timeformat':2191 'timeout':661,665 'timestamp':271 'tmpdir':1969,1971 'togeth':555 'tool':444,1272,1604,1707,2257,2265,2348 'top':634 'topic':2323 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'touch':728,2118 'trace':331,1349,1351,1372,1574 'track':1210,1391 'transform':1047 'trap':196,250,771,1461,1821,1836,1952,1966,2032,2142 'treat':101,2379 'troubleshoot':992 'true':1618 'trufflehog':1245 'txt':2122 'u':1036,2066 'umask':722,726 'unam':434 'unexpect':1812 'unnecessari':1290 'unquot':1807 'unsaf':108,214,1842 'untrust':104,1260 'unwant':304 'updat':1921,1925 'upgrad':1586 'upper':527 'uppercas':1037 'usag':238,906,920,947,1395,1468,2189 'use':13,36,186,221,259,286,323,342,376,393,478,500,507,560,607,648,679,693,709,714,741,755,770,786,796,825,844,863,888,927,988,1010,1018,1068,1081,1091,1100,1108,1127,1140,1173,1197,1242,1277,1341,1427,1509,1796,1825,1845,1868,1892,1914,1951,1981,1995,2051,2183,2218,2364 'user':690,712,749 'user.info':1407 'username/repo':1940,1945 'util':1572 'v':425,519,2185 'valid':138,309,419,567,670,699,751,1191,1295,1471,2389 'valu':621,2175 'var':312,757,807,1035,1039 'variabl':199,317,654,753,842,985,1439,1808,2128,2137 'variant':461 'varnam':2132 'varredir':1055 'vendor':1877 'verbos':274,516,1338 'verif':1894 'verifi':1252,1895 'versinfo':408,412,1072,1077,1977 'version':403,464,911,915,971,1066,1203,1889,1901,1907,1941,1974 'vs':442,449,942 'vulner':1189,1239,1318,1569,1936 'wait':1117,1120,2087,2090 'warn':1334 'wiki':2237,2268 'wiki.bash-hackers.org':2239 'wiki.bash-hackers.org/)':2238 'window':63 'windows-n':62 'within':614 'without':46,1818 'word':203,305,1793 'workflow':183,1194,1218,1357,1561,1766,1783 'workload':1492 'write':17 'www.kfirlavi.com':2251 'www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming/)':2250 'x':174,335,1029 'xarg':343,889,2156 'xunit':1689 'xunit-styl':1688","prices":[{"id":"00331621-fec9-4fef-8702-bd86c4aace00","listingId":"cdfd1604-fdc6-4a7d-b99a-c58db9857555","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:33:25.494Z"}],"sources":[{"listingId":"cdfd1604-fdc6-4a7d-b99a-c58db9857555","source":"github","sourceId":"sickn33/antigravity-awesome-skills/bash-pro","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/bash-pro","isPrimary":false,"firstSeenAt":"2026-04-18T21:33:25.494Z","lastSeenAt":"2026-04-24T18:50:35.581Z"},{"listingId":"cdfd1604-fdc6-4a7d-b99a-c58db9857555","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/bash-pro","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/bash-pro","isPrimary":true,"firstSeenAt":"2026-04-23T00:40:55.955Z","lastSeenAt":"2026-04-23T00:40:55.955Z"}],"details":{"listingId":"cdfd1604-fdc6-4a7d-b99a-c58db9857555","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"bash-pro","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"32b8a9ec858da8ce717ed95cc7d9f8ca5816d587","skill_md_path":"skills/bash-pro/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/bash-pro"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"bash-pro","description":"'Master of defensive Bash scripting for production automation, CI/CD"},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/bash-pro"},"updatedAt":"2026-04-24T18:50:35.581Z"}}