Get the FREE Ultimate OpenClaw Setup Guide →

posix-shell-validator

Scanned
npx machina-cli add skill a5c-ai/babysitter/posix-shell-validator --openclaw
Files (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

  1. Step 1: Run the validator on target shell scripts to surface bashisms and POSIX issues
  2. Step 2: If available, run checkbashisms -f <script>, otherwise use the internal POSIX validator
  3. 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
Sponsor this space

Reach thousands of developers