posix-shell-validator
Scannednpx machina-cli add skill a5c-ai/babysitter/posix-shell-validator --openclawFiles (1)
SKILL.md
2.8 KB
POSIX Shell Validator
Validate scripts for POSIX compliance and portability.
Capabilities
- Detect bashisms in shell scripts
- Validate POSIX compliance
- Check cross-platform compatibility
- Identify non-portable constructs
- Generate compliance reports
- Suggest portable alternatives
Usage
Invoke this skill when you need to:
- Validate scripts for POSIX compliance
- Detect bashisms before deployment
- Ensure cross-platform compatibility
- Generate compliance reports
Common Bashisms to Avoid
# Bashism → POSIX Alternative
# Arrays
arr=(a b c) # Use: set -- a b c; or newline-separated
${arr[0]} # Use: $1 (after set --)
# [[ ]] test
[[ $x == y ]] # Use: [ "$x" = "y" ]
[[ $x =~ regex ]] # Use: case or expr
# String substitution
${var/old/new} # Use: $(echo "$var" | sed 's/old/new/')
${var,,} # Use: $(echo "$var" | tr '[:upper:]' '[:lower:]')
${var^^} # Use: $(echo "$var" | tr '[:lower:]' '[:upper:]')
# Arithmetic
((x++)) # Use: x=$((x + 1))
$((x**2)) # Use: $(expr $x \* $x) or awk
# Here strings
cat <<< "$var" # Use: echo "$var" | cat
# Process substitution
diff <(cmd1) <(cmd2) # Use: temp files
# Brace expansion
{1..10} # Use: seq 1 10
file.{txt,md} # Use: file.txt file.md
# Local variables
local var # Use: var= (function-scoped in many shells)
# Source
source file # Use: . file
# Function syntax
function name { } # Use: name() { }
Validation Script
#!/bin/sh
# POSIX compliance validator
check_file() {
file="$1"
errors=0
# Check shebang
head -1 "$file" | grep -q '^#!/bin/bash' && {
echo "WARNING: $file uses bash shebang"
errors=$((errors + 1))
}
# Check for bashisms
bashisms='
\[\[
\(\(
\$\{[^}]*//
\$\{[^}]*,,
\$\{[^}]*\^\^
\$\{[^}]*:[-+=?][^}]*\}
<<<
<\(
>\(
\{[0-9]+\.\.[0-9]+\}
function[[:space:]]+[a-zA-Z_]
source[[:space:]]
declare[[:space:]]
local[[:space:]]
readonly[[:space:]]
'
for pattern in $bashisms; do
if grep -En "$pattern" "$file" 2>/dev/null; then
echo "BASHISM: $file contains: $pattern"
errors=$((errors + 1))
fi
done
return $errors
}
# Run checkbashisms if available
if command -v checkbashisms >/dev/null 2>&1; then
checkbashisms -f "$1"
else
check_file "$1"
fi
Target Processes
- shell-script-development
- cross-platform-cli-compatibility
- cli-unit-integration-testing
Source
git clone https://github.com/a5c-ai/babysitter/blob/main/plugins/babysitter/skills/babysit/process/specializations/cli-mcp-development/skills/posix-shell-validator/SKILL.mdView on GitHub Overview
POSIX Shell Validator checks shell scripts for POSIX compliance and portability. It detects bashisms and non-portable constructs, helping teams ensure scripts run reliably on diverse shells. Generating compliance reports and portable substitutions reduces deployment risks across Linux and Unix-like systems.
How This Skill Works
The validator scans scripts for POSIX violations and bashisms using a portable pattern set and optional checkbashisms integration. It outputs findings and recommends portable alternatives, optionally producing a report suitable for audits and reviews.
When to Use It
- Before deploying scripts to POSIX environments to ensure portability
- To detect bashisms early in CI before deployment
- To verify cross platform compatibility across Linux, macOS, and minimal shells
- To generate a compliance report for auditing and governance
- To identify and replace non portable constructs prior to packaging
Quick Start
- Step 1: Run the validator on target shell scripts to surface bashisms and POSIX issues
- Step 2: If available, run checkbashisms -f <script>, otherwise use the internal POSIX validator
- Step 3: Refactor identified issues into portable POSIX equivalents and re run to verify improvement
Best Practices
- Run on every script to surface bashisms and non portable constructs
- Prefer POSIX constructs such as [ "$x" = "y" ] over [[ (double brackets) when possible
- Use the internal validator or checkbashisms when available for thorough checks
- Refactor findings into portable substitutions and re run the validator
- Maintain a living list of common bashisms from the Common Bashisms to Avoid section
Example Use Cases
- Audit a cross distro installer script to ensure sh compatibility
- CI pipeline fails due to POSIX non compliance and is fixed by the validator
- Migrate a bash only script to /bin/sh with portable substitutions
- Generate a portability report for a CLI tool before release
- Identify non portable features in a packaging script for multiple platforms
Frequently Asked Questions
Add this skill to your agents