Writing shell commands for OpenCode custom commands using Bun Shell
Scanned 6/2/2026
Install to Claude Code
npx -y skills add majiayu000/claude-skill-registry --skill bun-shell-commands --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Bun Shell Commands Shanepadgett Agent Extensions?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-bun-shell-commands-shanepadgett-agent-extensions)More formats (shields.io, HTML) on the badges page.
---
name: bun-shell-commands
description: Writing shell commands for OpenCode custom commands using Bun Shell
---
# Bun Shell Commands
This skill covers how to write effective shell commands in OpenCode custom commands using Bun Shell (Bun's bash-like shell implementation).
## Context
OpenCode uses **Bun Shell** for executing shell commands in custom commands via the !`command` syntax. Bun Shell is a bash-like shell written in Zig that provides cross-platform shell scripting, but it has some differences from traditional bash.
## Supported Features
### ✅ Arguments
Positional arguments work correctly:
```markdown
!`echo "Arg1: $1" && echo "Arg2: $2" && echo "Arg3: $3"`
```
Usage: `/mycommand 5 "hello world" "a,b,c"`
### ✅ Command Substitution
Use `$(command)` for command substitution:
```markdown
!`echo "Sum: $(seq $1 | awk '{s+=$1} END {print s}')"`
```
### ✅ Pipes
Pipe commands using `|`:
```markdown
!`echo "$2" | tr '[:lower:]' '[:upper:]' | rev`
```
### ✅ Environment Variables
Set environment variables and use them:
```markdown
!`TEST_VAR="$1" && echo "TEST_VAR=$TEST_VAR"`
```
Store command substitution results in variables:
```markdown
!`REV=$(echo "$2" | rev) && echo "Reversed: $REV"`
```
### ✅ Command Chaining
Use `&&` to chain commands (instead of newlines or `;`):
```markdown
!`echo "First" && echo "Second" && echo "Third"`
```
### ✅ Available Commands
Bun Shell includes these built-in commands:
- `cd`, `ls`, `rm`, `echo`, `pwd`, `cat`, `touch`, `mkdir`, `which`, `mv`
- `seq`, `dirname`, `basename`, `true`, `false`, `yes`
Common external commands also work:
- `awk`, `sed`, `tr`, `wc`, `grep`, `head`, `tail`
- `find`, `xargs`, `sort`, `uniq`
## Unsupported Features
### ❌ Shell Control Structures
Do NOT use `for`, `while`, `do`, `done`:
```markdown
# ❌ DOESN'T WORK
!`for i in $(seq 1 $1); do echo $i; done`
```
### ❌ Arithmetic Expansion
Do NOT use `$(( ))` directly in the template:
```markdown
# ❌ DOESN'T WORK
!`echo "Squared: $(($1 * $1))"`
```
Use `$(awk '{...}')` instead:
```markdown
# ✅ WORKS
!`echo "$1" | awk '{print $1 * $1}'`
```
### ❌ Native Brace Expansion
Native brace expansion is not supported:
```markdown
# ❌ DOESN'T WORK
!`echo {1,2,3}`
```
Use pipes to simulate expansion:
```markdown
# ✅ WORKS
!`echo "$3" | tr ',' '\n' | awk '{print "Expanded:", $1}'`
```
## Patterns and Best Practices
### Loops via Pipes
Instead of `for` loops, use `seq` with `awk`:
```markdown
# Generate numbers 1 to N with squares
!`seq $1 | awk '{print $1, "-> squared:", $1*$1}'`
```
### Multi-step Operations
Use environment variables to store intermediate results:
```markdown
# Reverse text, count chars, and show both
!`REV=$(echo "$2" | rev) && COUNT=$(echo "$2" | wc -c) && echo "Reversed: $REV (${COUNT} chars)"`
```
### Conditional Logic
Use `awk` for conditionals:
```markdown
# Classify numbers as even/odd
!`seq $1 | awk '{if ($1 % 2 == 0) print $1 ": even"; else print $1 ": odd"}'`
```
### Text Processing
Combine `tr`, `sed`, `awk` for text manipulation:
```markdown
# Uppercase, reverse, and format
!`echo "$2" | tr '[:lower:]' '[:upper:]' | rev | sed 's/^/> /'`
```
### Working with Multiple Arguments
Use separate shell blocks for independent tests:
```markdown
## Test 1: Arithmetic with $1
!`seq $1 | awk '{s+=$1} END {print "Sum:", s}'`
## Test 2: Text processing with $2
!`echo "$2" | tr '[:lower:]' '[:upper:]' | rev`
## Test 3: Pattern with $3
!`echo "$3" | tr ',' '\n' | wc -l`
```
## Example: Complete Command
```markdown
---
description: Test Bun Shell capabilities
---
Test Bun Shell with multiple features:
## Argument passing
!`echo "Arg1: [$1]" && echo "Arg2: [$2]" && echo "Arg3: [$3]"`
## Command substitution
!`echo "Sum of 1 to $1: $(seq $1 | awk '{s+=$1} END {print s}')"`
## Text processing
!`echo "$2" | tr '[:lower:]' '[:upper:]' | rev | wc -c`
## Environment variables
!`REV=$(echo "$2" | rev) && echo "Reversed via var: $REV"`
```
Usage: `/mycommand 5 "hello world" "a,b,c"`
## Debugging
If a shell command fails silently:
1. Simplify to just `echo "$1"` to verify argument passing
2. Test each pipe segment separately
3. Replace complex `awk` with simpler `tr` or `sed`
4. Use `echo` at each step to verify intermediate values
## References
- [Bun Shell Documentation](https://bun.com/docs/runtime/shell.md)
- [OpenCode Commands Documentation](https://opencode.ai/docs/commands/)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!