Awesome-omni-skill token-efficient-bash
Write compact bash scripts using exec tracing pattern. Triggers when writing bash scripts with 3+ sequential commands. The exec 2>&1 + set -xeuo pipefail pattern eliminates echo statements via automatic command tracing, reducing script size by 40-60%.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/cli-automation/token-efficient-bash" ~/.claude/skills/diegosouzapw-awesome-omni-skill-token-efficient-bash && rm -rf "$T"
skills/cli-automation/token-efficient-bash/SKILL.mdToken-Efficient Bash Scripting
Write bash scripts that provide automatic progress diagnostics and fail-fast error handling without manual echo statements or verbose error reporting.
The Pattern
For sequential bash commands (3+ steps), use this header with intent comment:
# Intent: high-level description of what this block does exec 2>&1 set -xeuo pipefail # Script commands here
Intent comment required: First line must be a comment explaining the block's purpose (before
exec 2>&1). This provides context for why the script exists, while set -x handles per-command tracing.
Per-Command Comments Not Needed
The
set -x flag eliminates the need for per-command WHAT comments - the traced output documents what each command does:
# Reorganize source files into target directory exec 2>&1 set -xeuo pipefail mkdir -p target/ mv source/* target/ ln -s ../target source
Output shows exactly what happens:
+ mkdir -p target/ + mv source/* target/ + ln -s ../target source
Each command is printed before execution. No need for
# Create directory or # Move files comments after each line. The traced output IS the per-command documentation.
Two types of comments:
- Intent comment (required): First line explains overall purpose of the block
- Per-command comments (not needed): Individual WHAT comments eliminated by
tracingset -x - Exception: Complex logic may still warrant inline comments explaining WHY (business logic, non-obvious decisions), not WHAT (commands being run)
How It Works
exec 2>&1
exec 2>&1Redirects stderr to stdout, merging all output into single stream.
Purpose: Ensures tracing output (
set -x writes to stderr) appears in correct order with command output.
Result: Unified output stream with interleaved commands and results.
set -xeuo pipefail
set -xeuo pipefailFour orthogonal flags:
(xtrace):-x
- Print each command before execution
- Prefixed with
in output+ - This is the key to token economy - eliminates echo statements
- Shows actual commands with expanded variables
(errexit):-e
- Exit immediately if any command returns non-zero
- Prevents error cascades
- No need for
after every command|| exit 1
(nounset):-u
- Error on undefined variable references
- Catches typos and missing environment variables
- Prevents silent failures from
expanding to empty string$TYPO
:-o pipefail
- Pipeline fails if ANY command in pipe fails
- Normally pipes return exit status of last command only
- Example:
fails if grep failsgrep pattern file | wc -l
When to Use
Use this pattern for:
- Sequential operations (3+ commands)
- File operations requiring error checking (mv, cp, ln, mkdir)
- Multi-step git workflows (add, commit, push)
- Setup/teardown sequences
- Any script where you'd otherwise write echo statements
Do NOT use for:
- Single commands (just run the command)
- Parallel operations (use multiple Bash tool calls)
- Interactive commands (set -x interferes with prompts)
- Large process substitutions (tracing overhead)
- Commands requiring complex error handling (use traditional if/else)
Strict Mode Caveats
Some commands have expected non-zero exits that would trigger
set -e. Handle with || true.
Commands with Normal Non-Zero Exits
- exits 1 when no match:grep
# Search for pattern and continue processing exec 2>&1 set -xeuo pipefail # grep returns 1 when pattern not found - this is normal grep "pattern" file.txt || true # Continue with other commands echo "Processing complete"
- exits 1 when files differ:diff
# Compare files and continue with other operations exec 2>&1 set -xeuo pipefail # diff returns 1 when files differ - expected behavior diff file1.txt file2.txt || true # Other commands still fail-fast
Other common cases:
/test
/[
- false condition returns 1[[
- exits 1 if differences existgit diff --exit-code
with certain targetsmake- Background jobs that may fail
Bash Arithmetic Expansion
Problem:
(( )) returns exit status equal to the expression value.
# Increment counter (BROKEN) exec 2>&1 set -xeuo pipefail count=0 ((count++)) # FAILS - expression evaluates to 0, triggers set -e
Solution 1: Use
|| true
# Increment counter with let exec 2>&1 set -xeuo pipefail count=0 let count++ || true # Safe
Solution 2: Use
$(( )) (arithmetic substitution, not expansion)
# Increment counter with arithmetic substitution exec 2>&1 set -xeuo pipefail count=0 count=$((count + 1)) # Safe - always succeeds
Conditional Logic with Expected Failures
When a command failure is part of normal flow:
# Check configuration and branch on result exec 2>&1 set -xeuo pipefail # Check if pattern exists (grep exit 1 is expected) if grep -q "pattern" config.yaml || true; then echo "Pattern found" else echo "Pattern not found" fi # Or use grep in condition directly (if handles exit status) if grep -q "pattern" config.yaml; then echo "Found" fi # No || true needed in if condition
Worked examples: Read
references/examples.md for file operations, git workflow, and setup-with-expected-failures examples with output.
Directory changes: Read
references/directory-changes.md for trap-based and subshell approaches to safe directory changes.
Anti-patterns: Read
references/anti-patterns.md for common mistakes (redundant error handling, single-command overhead, blanket error suppression).