{"id":"2559a077-c402-4d06-b8bc-e6ce48ef24b4","shortId":"nqrTwA","kind":"skill","title":"posix-shell-pro","tagline":"Expert in strict POSIX sh scripting for maximum portability across Unix-like systems. Specializes in shell scripts that run on any POSIX-compliant shell (dash, ash, sh, bash --posix).","description":"## Use this skill when\n\n- Working on posix shell pro tasks or workflows\n- Needing guidance, best practices, or checklists for posix shell pro\n\n## Do not use this skill when\n\n- The task is unrelated to posix shell pro\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources/implementation-playbook.md`.\n\n## Focus Areas\n\n- Strict POSIX compliance for maximum portability\n- Shell-agnostic scripting that works on any Unix-like system\n- Defensive programming with portable error handling\n- Safe argument parsing without bash-specific features\n- Portable file operations and resource management\n- Cross-platform compatibility (Linux, BSD, Solaris, AIX, macOS)\n- Testing with dash, ash, and POSIX mode validation\n- Static analysis with ShellCheck in POSIX mode\n- Minimalist approach using only POSIX-specified features\n- Compatibility with legacy systems and embedded environments\n\n## POSIX Constraints\n\n- No arrays (use positional parameters or delimited strings)\n- No `[[` conditionals (use `[` test command only)\n- No process substitution `<()` or `>()`\n- No brace expansion `{1..10}`\n- No `local` keyword (use function-scoped variables carefully)\n- No `declare`, `typeset`, or `readonly` for variable attributes\n- No `+=` operator for string concatenation\n- No `${var//pattern/replacement}` substitution\n- No associative arrays or hash tables\n- No `source` command (use `.` for sourcing files)\n\n## Approach\n\n- Always use `#!/bin/sh` shebang for POSIX shell\n- Use `set -eu` for error handling (no `pipefail` in POSIX)\n- Quote all variable expansions: `\"$var\"` never `$var`\n- Use `[ ]` for all conditional tests, never `[[`\n- Implement argument parsing with `while` and `case` (no `getopts` for long options)\n- Create temporary files safely with `mktemp` and cleanup traps\n- Use `printf` instead of `echo` for all output (echo behavior varies)\n- Use `. script.sh` instead of `source script.sh` for sourcing\n- Implement error handling with explicit `|| exit 1` checks\n- Design scripts to be idempotent and support dry-run modes\n- Use `IFS` manipulation carefully and restore original value\n- Validate inputs with `[ -n \"$var\" ]` and `[ -z \"$var\" ]` tests\n- End option parsing with `--` and use `rm -rf -- \"$dir\"` for safety\n- Use command substitution `$()` instead of backticks for readability\n- Implement structured logging with timestamps using `date`\n- Test scripts with dash/ash to verify POSIX compliance\n\n## Compatibility & Portability\n\n- Use `#!/bin/sh` to invoke the system's POSIX shell\n- Test on multiple shells: dash (Debian/Ubuntu default), ash (Alpine/BusyBox), bash --posix\n- Avoid GNU-specific options; use POSIX-specified flags only\n- Handle platform differences: `uname -s` for OS detection\n- Use `command -v` instead of `which` (more portable)\n- Check for command availability: `command -v cmd >/dev/null 2>&1 || exit 1`\n- Provide portable implementations for missing utilities\n- Use `[ -e \"$file\" ]` for existence checks (works on all systems)\n- Avoid `/dev/stdin`, `/dev/stdout` (not universally available)\n- Use explicit redirection instead of `&>` (bash-specific)\n\n## Readability & Maintainability\n\n- Use descriptive variable names in UPPER_CASE for exports, lower_case for locals\n- Add section headers with comment blocks for organization\n- Keep functions under 50 lines; extract complex logic\n- Use consistent indentation (spaces only, typically 2 or 4)\n- Document function purpose and parameters in comments\n- Use meaningful names: `validate_input` not `check`\n- Add comments for non-obvious POSIX workarounds\n- Group related functions with descriptive headers\n- Extract repeated code into functions\n- Use blank lines to separate logical sections\n\n## Safety & Security Patterns\n\n- Quote all variable expansions to prevent word splitting\n- Validate file permissions before operations: `[ -r \"$file\" ] || exit 1`\n- Sanitize user input before using in commands\n- Validate numeric input: `case $num in *[!0-9]*) exit 1 ;; esac`\n- Never use `eval` on untrusted input\n- Use `--` to separate options from arguments: `rm -- \"$file\"`\n- Validate required variables: `[ -n \"$VAR\" ] || { echo \"VAR required\" >&2; exit 1; }`\n- Check exit codes explicitly: `cmd || { echo \"failed\" >&2; exit 1; }`\n- Use `trap` for cleanup: `trap 'rm -f \"$tmpfile\"' EXIT INT TERM`\n- Set restrictive umask for sensitive files: `umask 077`\n- Log security-relevant operations to syslog or file\n- Validate file paths don't contain unexpected characters\n- Use full paths for commands in security-critical scripts: `/bin/rm` not `rm`\n\n## Performance Optimization\n\n- Use shell built-ins over external commands when possible\n- Avoid spawning subshells in loops: use `while read` not `for i in $(cat)`\n- Cache command results in variables instead of repeated execution\n- Use `case` for multiple string comparisons (faster than repeated `if`)\n- Process files line-by-line for large files\n- Use `expr` or `$(( ))` for arithmetic (POSIX supports `$(( ))`)\n- Minimize external command calls in tight loops\n- Use `grep -q` when you only need true/false (faster than capturing output)\n- Batch similar operations together\n- Use here-documents for multi-line strings instead of multiple echo calls\n\n## Documentation Standards\n\n- Implement `-h` flag for help (avoid `--help` without proper parsing)\n- Include usage message showing synopsis and options\n- Document required vs optional arguments clearly\n- List exit codes: 0=success, 1=error, specific codes for specific failures\n- Document prerequisites and required commands\n- Add header comment with script purpose and author\n- Include examples of common usage patterns\n- Document environment variables used by script\n- Provide troubleshooting guidance for common issues\n- Note POSIX compliance in documentation\n\n## Working Without Arrays\n\nSince POSIX sh lacks arrays, use these patterns:\n\n- **Positional Parameters**: `set -- item1 item2 item3; for arg; do echo \"$arg\"; done`\n- **Delimited Strings**: `items=\"a:b:c\"; IFS=:; set -- $items; IFS=' '`\n- **Newline-Separated**: `items=\"a\\nb\\nc\"; while IFS= read -r item; do echo \"$item\"; done <<EOF`\n- **Counters**: `i=0; while [ $i -lt 10 ]; do i=$((i+1)); done`\n- **Field Splitting**: Use `cut`, `awk`, or parameter expansion for string splitting\n\n## Portable Conditionals\n\nUse `[ ]` test command with POSIX operators:\n\n- **File Tests**: `[ -e file ]` exists, `[ -f file ]` regular file, `[ -d dir ]` directory\n- **String Tests**: `[ -z \"$str\" ]` empty, `[ -n \"$str\" ]` not empty, `[ \"$a\" = \"$b\" ]` equal\n- **Numeric Tests**: `[ \"$a\" -eq \"$b\" ]` equal, `[ \"$a\" -lt \"$b\" ]` less than\n- **Logical**: `[ cond1 ] && [ cond2 ]` AND, `[ cond1 ] || [ cond2 ]` OR\n- **Negation**: `[ ! -f file ]` not a file\n- **Pattern Matching**: Use `case` not `[[ =~ ]]`\n\n## CI/CD Integration\n\n- **Matrix testing**: Test across dash, ash, bash --posix, yash on Linux, macOS, Alpine\n- **Container testing**: Use alpine:latest (ash), debian:stable (dash) for reproducible tests\n- **Pre-commit hooks**: Configure checkbashisms, shellcheck -s sh, shfmt -ln posix\n- **GitHub Actions**: Use shellcheck-problem-matchers with POSIX mode\n- **Cross-platform validation**: Test on Linux, macOS, FreeBSD, NetBSD\n- **BusyBox testing**: Validate on BusyBox environments for embedded systems\n- **Automated releases**: Tag versions and generate portable distribution packages\n- **Coverage tracking**: Ensure test coverage across all POSIX shells\n- Example workflow: `shellcheck -s sh *.sh && shfmt -ln posix -d *.sh && checkbashisms *.sh`\n\n## Embedded Systems & Limited Environments\n\n- **BusyBox compatibility**: Test with BusyBox's limited ash implementation\n- **Alpine Linux**: Default shell is BusyBox ash, not bash\n- **Resource constraints**: Minimize memory usage, avoid spawning excessive processes\n- **Missing utilities**: Provide fallbacks when common tools unavailable (`mktemp`, `seq`)\n- **Read-only filesystems**: Handle scenarios where `/tmp` may be restricted\n- **No coreutils**: Some environments lack GNU coreutils extensions\n- **Signal handling**: Limited signal support in minimal environments\n- **Startup scripts**: Init scripts must be POSIX for maximum compatibility\n- Example: Check for mktemp: `command -v mktemp >/dev/null 2>&1 || mktemp() { ... }`\n\n## Migration from Bash to POSIX sh\n\n- **Assessment**: Run `checkbashisms` to identify bash-specific constructs\n- **Array elimination**: Convert arrays to delimited strings or positional parameters\n- **Conditional updates**: Replace `[[` with `[` and adjust regex to `case` patterns\n- **Local variables**: Remove `local` keyword, use function prefixes instead\n- **Process substitution**: Replace `<()` with temporary files or pipes\n- **Parameter expansion**: Use `sed`/`awk` for complex string manipulation\n- **Testing strategy**: Incremental conversion with continuous validation\n- **Documentation**: Note any POSIX limitations or workarounds\n- **Gradual migration**: Convert one function at a time, test thoroughly\n- **Fallback support**: Maintain dual implementations during transition if needed\n\n## Quality Checklist\n\n- Scripts pass ShellCheck with `-s sh` flag (POSIX mode)\n- Code is formatted consistently with shfmt using `-ln posix`\n- Test on multiple shells: dash, ash, bash --posix, yash\n- All variable expansions are properly quoted\n- No bash-specific features used (arrays, `[[`, `local`, etc.)\n- Error handling covers all failure modes\n- Temporary resources cleaned up with EXIT trap\n- Scripts provide clear usage information\n- Input validation prevents injection attacks\n- Scripts portable across Unix-like systems (Linux, BSD, Solaris, macOS, Alpine)\n- BusyBox compatibility validated for embedded use cases\n- No GNU-specific extensions or flags used\n\n## Output\n\n- POSIX-compliant shell scripts maximizing portability\n- Test suites using shellspec or bats-core validating across dash, ash, yash\n- CI/CD configurations for multi-shell matrix testing\n- Portable implementations of common patterns with fallbacks\n- Documentation on POSIX limitations and workarounds with examples\n- Migration guides for converting bash scripts to POSIX sh incrementally\n- Cross-platform compatibility matrices (Linux, BSD, macOS, Solaris, Alpine)\n- Performance benchmarks comparing different POSIX shells\n- Fallback implementations for missing utilities (mktemp, seq, timeout)\n- BusyBox-compatible scripts for embedded and container environments\n- Package distributions for various platforms without bash dependency\n\n## Essential Tools\n\n### Static Analysis & Formatting\n- **ShellCheck**: Static analyzer with `-s sh` for POSIX mode validation\n- **shfmt**: Shell formatter with `-ln posix` option for POSIX syntax\n- **checkbashisms**: Detects bash-specific constructs in scripts (from devscripts)\n- **Semgrep**: SAST with POSIX-specific security rules\n- **CodeQL**: Security scanning for shell scripts\n\n### POSIX Shell Implementations for Testing\n- **dash**: Debian Almquist Shell - lightweight, strict POSIX compliance (primary test target)\n- **ash**: Almquist Shell - BusyBox default, embedded systems\n- **yash**: Yet Another Shell - strict POSIX conformance validation\n- **posh**: Policy-compliant Ordinary Shell - Debian policy compliance\n- **osh**: Oil Shell - modern POSIX-compatible shell with better error messages\n- **bash --posix**: GNU Bash in POSIX mode for compatibility testing\n\n### Testing Frameworks\n- **bats-core**: Bash testing framework (works with POSIX sh)\n- **shellspec**: BDD-style testing that supports POSIX sh\n- **shunit2**: xUnit-style framework with POSIX sh support\n- **sharness**: Test framework used by Git (POSIX-compatible)\n\n## Common Pitfalls to Avoid\n\n- Using `[[` instead of `[` (bash-specific)\n- Using arrays (not in POSIX sh)\n- Using `local` keyword (bash/ksh extension)\n- Using `echo` without `printf` (behavior varies across implementations)\n- Using `source` instead of `.` for sourcing scripts\n- Using bash-specific parameter expansion: `${var//pattern/replacement}`\n- Using process substitution `<()` or `>()`\n- Using `function` keyword (ksh/bash syntax)\n- Using `$RANDOM` variable (not in POSIX)\n- Using `read -a` for arrays (bash-specific)\n- Using `set -o pipefail` (bash-specific)\n- Using `&>` for redirection (use `>file 2>&1`)\n\n## Advanced Techniques\n\n- **Error Trapping**: `trap 'echo \"Error at line $LINENO\" >&2; exit 1' EXIT; trap - EXIT` on success\n- **Safe Temp Files**: `tmpfile=$(mktemp) || exit 1; trap 'rm -f \"$tmpfile\"' EXIT INT TERM`\n- **Simulating Arrays**: `set -- item1 item2 item3; for arg; do process \"$arg\"; done`\n- **Field Parsing**: `IFS=:; while read -r user pass uid gid; do ...; done < /etc/passwd`\n- **String Replacement**: `echo \"$str\" | sed 's/old/new/g'` or use parameter expansion `${str%suffix}`\n- **Default Values**: `value=${var:-default}` assigns default if var unset or null\n- **Portable Functions**: Avoid `function` keyword, use `func_name() { ... }`\n- **Subshell Isolation**: `(cd dir && cmd)` changes directory without affecting parent\n- **Here-documents**: `cat <<'EOF'` with quotes prevents variable expansion\n- **Command Existence**: `command -v cmd >/dev/null 2>&1 && echo \"found\" || echo \"missing\"`\n\n## POSIX-Specific Best Practices\n\n- Always quote variable expansions: `\"$var\"` not `$var`\n- Use `[ ]` with proper spacing: `[ \"$a\" = \"$b\" ]` not `[\"$a\"=\"$b\"]`\n- Use `=` for string comparison, not `==` (bash extension)\n- Use `.` for sourcing, not `source`\n- Use `printf` for all output, avoid `echo -e` or `echo -n`\n- Use `$(( ))` for arithmetic, not `let` or `declare -i`\n- Use `case` for pattern matching, not `[[ =~ ]]`\n- Test scripts with `sh -n script.sh` to check syntax\n- Use `command -v` not `type` or `which` for portability\n- Explicitly handle all error conditions with `|| exit 1`\n\n## References & Further Reading\n\n### POSIX Standards & Specifications\n- [POSIX Shell Command Language](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html) - Official POSIX.1-2024 specification\n- [POSIX Utilities](https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html) - Complete list of POSIX-mandated utilities\n- [Autoconf Portable Shell Programming](https://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell) - Comprehensive portability guide from GNU\n\n### Portability & Best Practices\n- [Rich's sh (POSIX shell) tricks](http://www.etalabs.net/sh_tricks.html) - Advanced POSIX shell techniques\n- [Suckless Shell Style Guide](https://suckless.org/coding_style/) - Minimalist POSIX sh patterns\n- [FreeBSD Porter's Handbook - Shell](https://docs.freebsd.org/en/books/porters-handbook/makefiles/#porting-shlibs) - BSD portability considerations\n\n### Tools & Testing\n- [checkbashisms](https://manpages.debian.org/testing/devscripts/checkbashisms.1.en.html) - Detect bash-specific constructs\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":["posix","shell","pro","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-posix-shell-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/posix-shell-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 · 34616 github stars · SKILL.md body (15,259 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-23T00:51:24.325Z","embedding":null,"createdAt":"2026-04-18T21:42:32.615Z","updatedAt":"2026-04-23T00:51:24.325Z","lastSeenAt":"2026-04-23T00:51:24.325Z","tsv":"'+1':915 '-9':597 '/bin/rm':682 '/bin/sh':254,395 '/coding_style/)':1958 '/dev/null':448,1173,1805 '/dev/stdin':470 '/dev/stdout':471 '/en/books/porters-handbook/makefiles/#porting-shlibs)':1970 '/etc/passwd':1747 '/onlinepubs/9699919799/idx/utilities.html)':1916 '/onlinepubs/9699919799/utilities/v3_chap02.html)':1908 '/pattern/replacement':236,1653 '/sh_tricks.html)':1947 '/software/autoconf/manual/autoconf.html#portable-shell)':1930 '/testing/devscripts/checkbashisms.1.en.html)':1979 '/tmp':1136 '0':596,810,907 '077':654 '1':210,328,450,452,582,599,625,635,812,1175,1690,1703,1715,1807,1895 '10':211,911 '2':449,520,623,633,1174,1689,1701,1806 '4':522 '50':509 'across':14,994,1071,1340,1382,1637 'action':97,1029 'add':498,537,824 'adjust':1207 'advanc':1691,1948 'affect':1788 'agnost':118 'aix':155 'almquist':1516,1526 'alpin':1003,1007,1101,1349,1428 'alpine/busybox':411 'alway':252,1817 'analysi':166,1463 'analyz':1467 'anoth':1534 'appli':89 'approach':173,251 'area':109 'arg':873,876,1730,1733 'argument':135,283,612,805 'arithmet':742,1858 'array':190,240,857,862,1192,1195,1312,1621,1673,1724 'ash':32,160,410,996,1009,1099,1107,1296,1384,1525 'ask':2018 'assess':1183 'assign':1765 'associ':239 'attack':1337 'attribut':228 'author':831 'autoconf':1924 'autom':1057 'avail':444,474 'avoid':414,469,697,789,1115,1613,1774,1850 'awk':921,1233 'b':882,958,964,968,1829,1832 'backtick':374 'bash':34,139,412,481,997,1109,1179,1189,1297,1308,1413,1458,1488,1561,1564,1576,1618,1648,1675,1682,1838,1982 'bash-specif':138,480,1188,1307,1487,1617,1647,1674,1681,1981 'bash/ksh':1629 'bat':1379,1574 'batch':764 'bats-cor':1378,1573 'bdd':1585 'bdd-style':1584 'behavior':312,1635 'benchmark':1430 'best':50,91,1815,1937 'better':1558 'blank':557 'block':503 'boundari':2026 'brace':208 'bsd':153,1346,1425,1971 'built':690 'built-in':689 'busybox':1048,1052,1092,1096,1106,1350,1444,1528 'busybox-compat':1443 'c':883 'cach':710 'call':748,781 'captur':762 'care':220,344 'case':288,491,495,593,720,987,1210,1356,1865 'cat':709,1793 'cd':1782 'chang':1785 'charact':671 'check':329,441,464,536,626,1167,1877 'checkbash':1021,1086,1185,1485,1976 'checklist':53,1272 'ci/cd':989,1386 'clarif':2020 'clarifi':83 'clean':1323 'cleanup':301,639 'clear':806,1330,1993 'cmd':447,630,1784,1804 'code':553,628,809,815,1282 'codeql':1503 'command':201,246,370,434,443,445,589,676,694,711,747,823,932,1170,1800,1802,1880,1904 'comment':502,529,538,826 'commit':1018 'common':835,848,1124,1397,1610 'compar':1431 'comparison':724,1836 'compat':151,180,392,1093,1165,1351,1422,1445,1555,1569,1609 'complet':1917 'complex':512,1235 'complianc':112,391,852,1521,1548 'compliant':29,1368,1543 'comprehens':1931 'concaten':233 'cond1':972,975 'cond2':973,976 'condit':198,279,929,1202,1892 'configur':1020,1387 'conform':1538 'consider':1973 'consist':515,1285 'constraint':85,188,1111 'construct':1191,1490,1984 'contain':669,1004,1450 'continu':1243 'convers':1241 'convert':1194,1254,1412 'core':1380,1575 'coreutil':1141,1146 'counter':905 'cover':1317 'coverag':1066,1070 'creat':294 'criteria':2029 'critic':680 'cross':149,1039,1420 'cross-platform':148,1038,1419 'cut':920 'd':945,1084 'dash':31,159,407,995,1012,1295,1383,1514 'dash/ash':387 'date':383 'debian':1010,1515,1546 'debian/ubuntu':408 'declar':222,1862 'default':409,1103,1529,1760,1764,1766 'defens':128 'delimit':195,878,1197 'depend':1459 'describ':1997 'descript':486,549 'design':330 'detail':102 'detect':432,1486,1980 'devscript':1494 'differ':75,427,1432 'dir':366,946,1783 'directori':947,1786 'distribut':1064,1453 'docs.freebsd.org':1969 'docs.freebsd.org/en/books/porters-handbook/makefiles/#porting-shlibs)':1968 'document':523,771,782,801,819,838,854,1245,1401,1792 'domain':76 'done':877,903,916,1734,1746 'dri':338 'dry-run':337 'dual':1265 'e':460,938,1852 'echo':307,311,620,631,780,875,901,1632,1696,1750,1808,1810,1851,1854 'elimin':1193 'embed':185,1055,1088,1354,1448,1530 'empti':952,956 'end':358 'ensur':1068 'environ':186,839,1053,1091,1143,1155,1451,2009 'environment-specif':2008 'eof':904,1794 'eq':963 'equal':959,965 'error':132,263,323,813,1315,1559,1693,1697,1891 'esac':600 'essenti':1460 'etc':1314 'eu':261 'eval':603 'exampl':103,833,1075,1166,1408 'excess':1117 'execut':718 'exist':463,940,1801 'exit':327,451,581,598,624,627,634,644,808,1326,1702,1704,1706,1714,1720,1894 'expans':209,272,569,924,1230,1302,1651,1757,1799,1820 'expert':5,2014 'explicit':326,476,629,1888 'export':493 'expr':739 'extens':1147,1361,1630,1839 'extern':693,746 'extract':511,551 'f':642,941,979,1718 'fail':632 'failur':818,1319 'fallback':1122,1262,1400,1435 'faster':725,760 'featur':141,179,1310 'field':917,1735 'file':143,250,296,461,575,580,614,652,663,665,730,737,936,939,942,944,980,983,1226,1688,1711 'filesystem':1132 'flag':423,786,1279,1363 'focus':108 'format':1284,1464 'formatt':1477 'found':1809 'framework':1572,1578,1596,1603 'freebsd':1046,1963 'full':673 'func':1778 'function':217,507,524,547,555,1218,1256,1659,1773,1775 'function-scop':216 'generat':1062 'getopt':290 'gid':1744 'git':1606 'github':1028 'gnu':416,1145,1359,1563,1935 'gnu-specif':415,1358 'goal':84 'gradual':1252 'grep':753 'group':545 'guid':1410,1933,1955 'guidanc':49,846 'h':785 'handbook':1966 'handl':133,264,324,425,1133,1149,1316,1889 'hash':242 'header':500,550,825 'help':788,790 'here-docu':769,1790 'hook':1019 'idempot':334 'identifi':1187 'if':342,884,887,896,1737 'implement':282,322,377,455,784,1100,1266,1395,1436,1511,1638 'in':691 'includ':794,832 'increment':1240,1418 'indent':516 'inform':1332 'init':1158 'inject':1336 'input':88,350,534,585,592,606,1333,2023 'instead':305,316,372,436,478,715,777,1220,1615,1641 'instruct':82 'int':645,1721 'integr':990 'invok':397 'isol':1781 'issu':849 'item':880,886,891,899,902 'item1':869,1726 'item2':870,1727 'item3':871,1728 'keep':506 'keyword':214,1216,1628,1660,1776 'ksh/bash':1661 'lack':861,1144 'languag':1905 'larg':736 'latest':1008 'legaci':182 'less':969 'let':1860 'lightweight':1518 'like':17,126,1343 'limit':1090,1098,1150,1249,1404,1985 'line':510,558,732,734,775,1699 'line-by-lin':731 'lineno':1700 'linux':152,1001,1044,1102,1345,1424 'list':807,1918 'ln':1026,1082,1289,1479 'local':213,497,1212,1215,1313,1627 'log':379,655 'logic':513,561,971 'long':292 'loop':701,751 'lower':494 'lt':910,967 'maco':156,1002,1045,1348,1426 'maintain':484,1264 'manag':147 'mandat':1922 'manipul':343,1237 'manpages.debian.org':1978 'manpages.debian.org/testing/devscripts/checkbashisms.1.en.html)':1977 'match':985,1868,1994 'matcher':1034 'matric':1423 'matrix':991,1392 'maxim':1371 'maximum':12,114,1164 'may':1137 'meaning':531 'memori':1113 'messag':796,1560 'migrat':1177,1253,1409 'minim':745,1112,1154 'minimalist':172,1959 'miss':457,1119,1438,1811,2031 'mktemp':299,1127,1169,1172,1176,1440,1713 'mode':163,171,340,1037,1281,1320,1473,1567 'modern':1552 'multi':774,1390 'multi-lin':773 'multi-shel':1389 'multipl':405,722,779,1293 'must':1160 'n':352,618,953,1855,1874 'name':488,532,1779 'nb':893 'nc':894 'need':48,73,758,1270 'negat':978 'netbsd':1047 'never':274,281,601 'newlin':889 'newline-separ':888 'non':541 'non-obvi':540 'note':850,1246 'null':1771 'num':594 'numer':591,960 'o':1679 'obvious':542 'offici':1909 'oil':1550 'one':1255 'open':106 'oper':144,230,578,659,766,935 'optim':686 'option':293,359,418,610,800,804,1481 'ordinari':1544 'organ':505 'origin':347 'os':431 'osh':1549 'outcom':95 'output':310,763,1365,1849,2003 'outsid':79 'packag':1065,1452 'paramet':193,527,867,923,1201,1229,1650,1756 'parent':1789 'pars':136,284,360,793,1736 'pass':1274,1742 'path':666,674 'pattern':565,837,865,984,1211,1398,1867,1962 'perform':685,1429 'permiss':576,2024 'pipe':1228 'pipefail':266,1680 'pitfal':1611 'platform':150,426,1040,1421,1456 'polici':1542,1547 'policy-compli':1541 'portabl':13,115,131,142,393,440,454,928,1063,1339,1372,1394,1772,1887,1925,1932,1936,1972 'porter':1964 'posh':1540 'posit':192,866,1200 'posix':2,8,28,35,42,55,69,111,162,170,177,187,257,268,390,401,413,421,543,743,851,859,934,998,1027,1036,1073,1083,1162,1181,1248,1280,1290,1298,1367,1403,1416,1433,1472,1480,1483,1499,1509,1520,1537,1554,1562,1566,1581,1590,1598,1608,1624,1668,1813,1899,1902,1912,1921,1942,1949,1960 'posix-compat':1553,1607 'posix-compli':27,1366 'posix-mand':1920 'posix-shell-pro':1 'posix-specif':1498,1812 'posix-specifi':176,420 'posix.1-2024':1910 'possibl':696 'practic':51,92,1816,1938 'pre':1017 'pre-commit':1016 'prefix':1219 'prerequisit':820 'prevent':571,1335,1797 'primari':1522 'printf':304,1634,1846 'pro':4,44,57,71 'problem':1033 'process':204,729,1118,1221,1655,1732 'program':129,1927 'proper':792,1304,1826 'provid':96,453,844,1121,1329 'pubs.opengroup.org':1907,1915 'pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html)':1914 'pubs.opengroup.org/onlinepubs/9699919799/utilities/v3_chap02.html)':1906 'purpos':525,829 'q':754 'qualiti':1271 'quot':269,566,1305,1796,1818 'r':579,898,1740 'random':1664 'read':704,897,1130,1670,1739,1898 'read-on':1129 'readabl':376,483 'readon':225 'redirect':477,1686 'refer':1896 'regex':1208 'regular':943 'relat':546 'releas':1058 'relev':90,658 'remov':1214 'repeat':552,717,727 'replac':1204,1223,1749 'reproduc':1014 'requir':87,105,616,622,802,822,2022 'resourc':146,1110,1322 'resources/implementation-playbook.md':107 'restor':346 'restrict':648,1139 'result':712 'review':2015 'rf':365 'rich':1939 'rm':364,613,641,684,1717 'rule':1502 'run':24,339,1184 's/old/new/g':1753 'safe':134,297,1709 'safeti':368,563,2025 'sanit':583 'sast':1496 'scan':1505 'scenario':1134 'scope':81,218,1996 'script':10,22,119,331,385,681,828,843,1157,1159,1273,1328,1338,1370,1414,1446,1492,1508,1645,1871 'script.sh':315,319,1875 'section':499,562 'secur':564,657,679,1501,1504 'security-crit':678 'security-relev':656 'sed':1232,1752 'semgrep':1495 'sensit':651 'separ':560,609,890 'seq':1128,1441 'set':260,647,868,885,1678,1725 'sh':9,33,860,1024,1079,1080,1085,1087,1182,1278,1417,1470,1582,1591,1599,1625,1873,1941,1961 'shar':1601 'shebang':255 'shell':3,21,30,43,56,70,117,258,402,406,688,1074,1104,1294,1369,1391,1434,1476,1507,1510,1517,1527,1535,1545,1551,1556,1903,1926,1943,1950,1953,1967 'shell-agnost':116 'shellcheck':168,1022,1032,1077,1275,1465 'shellcheck-problem-match':1031 'shellspec':1376,1583 'shfmt':1025,1081,1287,1475 'show':797 'shunit2':1592 'signal':1148,1151 'similar':765 'simul':1723 'sinc':858 'skill':38,62,1988 'skill-posix-shell-pro' 'solari':154,1347,1427 'sourc':245,249,318,321,1640,1644,1842,1844 'source-sickn33' 'space':517,1827 'spawn':698,1116 'special':19 'specif':140,417,482,814,817,1190,1309,1360,1489,1500,1619,1649,1676,1683,1814,1901,1911,1983,2010 'specifi':178,422 'split':573,918,927 'stabl':1011 'standard':783,1900 'startup':1156 'static':165,1462,1466 'step':98 'stop':2016 'str':951,954,1751,1758 'strategi':1239 'strict':7,110,1519,1536 'string':196,232,723,776,879,926,948,1198,1236,1748,1835 'structur':378 'style':1586,1595,1954 'subshel':699,1780 'substitut':205,237,371,1222,1656,2006 'success':811,1708,2028 'suckless':1952 'suckless.org':1957 'suckless.org/coding_style/)':1956 'suffix':1759 'suit':1374 'support':336,744,1152,1263,1589,1600 'synopsi':798 'syntax':1484,1662,1878 'syslog':661 'system':18,127,183,399,468,1056,1089,1344,1531 'tabl':243 'tag':1059 'target':1524 'task':45,65,1992 'techniqu':1692,1951 'temp':1710 'temporari':295,1225,1321 'term':646,1722 'test':157,200,280,357,384,403,931,937,949,961,992,993,1005,1015,1042,1049,1069,1094,1238,1260,1291,1373,1393,1513,1523,1570,1571,1577,1587,1602,1870,1975,2012 'thorough':1261 'tight':750 'time':1259 'timeout':1442 'timestamp':381 'tmpfile':643,1712,1719 'togeth':767 'tool':78,1125,1461,1974 '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' 'track':1067 'transit':1268 'trap':302,637,640,1327,1694,1695,1705,1716 'treat':2001 'trick':1944 'troubleshoot':845 'true/false':759 'type':1883 'typeset':223 'typic':519 'uid':1743 'umask':649,653 'unam':428 'unavail':1126 'unexpect':670 'univers':473 'unix':16,125,1342 'unix-lik':15,124,1341 'unrel':67 'unset':1769 'untrust':605 'updat':1203 'upper':490 'usag':795,836,1114,1331 'use':36,60,174,191,199,215,247,253,259,276,303,314,341,363,369,382,394,419,433,459,475,485,514,530,556,587,602,607,636,672,687,702,719,738,752,768,841,863,919,930,986,1006,1030,1217,1231,1288,1311,1355,1364,1375,1604,1614,1620,1626,1631,1639,1646,1654,1658,1663,1669,1677,1684,1687,1755,1777,1824,1833,1840,1845,1856,1864,1879,1986 'user':584,1741 'util':458,1120,1439,1913,1923 'v':435,446,1171,1803,1881 'valid':94,164,349,533,574,590,615,664,1041,1050,1244,1334,1352,1381,1474,1539,2011 'valu':348,1761,1762 'var':235,273,275,353,356,619,621,1652,1763,1768,1821,1823 'vari':313,1636 'variabl':219,227,271,487,568,617,714,840,1213,1301,1665,1798,1819 'various':1455 'verif':100 'verifi':389 'version':1060 'vs':803 'without':137,791,856,1457,1633,1787 'word':572 'work':40,121,465,855,1579 'workaround':544,1251,1406 'workflow':47,1076 'www.etalabs.net':1946 'www.etalabs.net/sh_tricks.html)':1945 'www.gnu.org':1929 'www.gnu.org/software/autoconf/manual/autoconf.html#portable-shell)':1928 'xunit':1594 'xunit-styl':1593 'yash':999,1299,1385,1532 'yet':1533 'z':355,950","prices":[{"id":"66ccda20-fafa-4ad1-9b7c-a2bd0c3be4bd","listingId":"2559a077-c402-4d06-b8bc-e6ce48ef24b4","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:42:32.615Z"}],"sources":[{"listingId":"2559a077-c402-4d06-b8bc-e6ce48ef24b4","source":"github","sourceId":"sickn33/antigravity-awesome-skills/posix-shell-pro","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/posix-shell-pro","isPrimary":false,"firstSeenAt":"2026-04-18T21:42:32.615Z","lastSeenAt":"2026-04-23T00:51:24.325Z"}],"details":{"listingId":"2559a077-c402-4d06-b8bc-e6ce48ef24b4","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"posix-shell-pro","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34616,"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-22T06:40:00Z","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":"6365235a94a83a1577d72a3487621e192e7b935f","skill_md_path":"skills/posix-shell-pro/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/posix-shell-pro"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"posix-shell-pro","description":"Expert in strict POSIX sh scripting for maximum portability across Unix-like systems. Specializes in shell scripts that run on any POSIX-compliant shell (dash, ash, sh, bash --posix)."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/posix-shell-pro"},"updatedAt":"2026-04-23T00:51:24.325Z"}}