Shell
Skill chinayin/gox-claude-plugins/plugins/gox-code-rules/skills/shell
Team coding-standards plugins for Claude Code (Agent Skills marketplace) · 面向 Claude Code 的团队代码规范插件(技能 marketplace)
npx -y skills add chinayin/gox-claude-plugins --skill shellAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Team shell/bash scripting standards — how to structure a script and its CLI: argument/flag parsing, stdout-vs-stderr, status output (no emoji or color), exit codes, and a self-test harness. Use whenever you write, edit, or design any shell script or command-line tool in this repo — .sh/.bash files, helper/CI/build/automation scripts, even tiny one-offs — regardless of whether the user says "standards".
SKILL.md
4.2 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
Team Shell Standards
Conventions for writing shell scripts in this repo, distilled from mature high-star CLIs (cargo / git / gh / docker / kubectl) and the Command Line Interface Guidelines. Reply and write code comments in Chinese.
Core rules
- Start every script with
#!/usr/bin/env bashandset -euo pipefail. - Always quote expansions (
"$var","${arr[@]}"); keep[ ]/[[ ]]usage consistent. - Handle secrets/credentials with least privilege — e.g. a generated private key gets
chmod 600. - Give destructive actions a guard: refuse by default, require an explicit
--force(or similar). - Document exit codes and keep their meaning stable (see below).
- Ship a
test.shnext to any non-trivial script.
Output: stdout vs stderr
- stdout = data — the script's actual product (a key, a JSON document, an ID, a path). Only this
belongs on stdout, so
... --json | jq,... | pbcopy, and$(...)stay clean. - stderr = messages — errors, warnings, progress, diagnostics. This is out-of-band info, not the result. When in doubt, send it to stderr.
Status output: plain text, no emoji, no color
Scripts here are driven by agents / CI, where color carries no meaning and emoji reads as a toy. Use
plain-text prefixes; there is then nothing to gate on NO_COLOR / TTY detection.
- Errors:
错误: <message>to stderr, then a non-zero exit. - Warnings:
警告: <message>to stderr. - Test results:
[PASS]/[FAIL](aligns with Go test--- PASS/FAILand TAPok/not ok).
Do not print log-level labels (ERR, WARN, INFO, DEBUG) in normal operation — only under
-v/--verbose (clig.dev).
die() { echo "错误: $*" >&2; exit 1; }
warn() { echo "警告: $*" >&2; }
vlog() { [ "$VERBOSE" -eq 1 ] && echo "verbose: $*" >&2 || true; } # diagnostics to stderr only
Standard flags
| Flag | Meaning |
|---|---|
--json | Machine-readable output; pure JSON on stdout, nothing else. |
--dry-run | Print the plan; make no changes. |
-v, --verbose | Extra diagnostics, to stderr only (never pollute stdout / JSON). |
-- | End of options; every following token is a positional argument. |
--version | Print the version and exit 0. |
-h, --help | Print usage to stdout on request (to stderr after a usage error). |
Flag names use kebab-case (--out-dir); bool flags take no value (--force, not --force=true);
add a short form only for high-frequency flags; reject unknown options with a usage message and exit 1.
-v|--verbose) VERBOSE=1; shift ;;
--) shift; while [ $# -gt 0 ]; do set_name "$1"; shift; done ;;
-*) usage >&2; die "未知选项: $1" ;;
Exit codes
Give exit codes documented, stable meaning and list them in the help text. A common set:
0success1usage error / runtime failure / target already exists2precondition not met (a required tool or input is absent)
Let the underlying tool's own non-zero code surface when it is the thing that failed.
Test harness (test.sh)
Ship a hermetic, self-cleaning self-test beside any non-trivial script:
#!/usr/bin/env bash
set -uo pipefail
TMP="$(mktemp -d)"; trap 'rm -rf "$TMP"' EXIT
PASS=0; FAIL=0
ok() { echo " [PASS] $1"; PASS=$((PASS+1)); }
bad() { echo " [FAIL] $1"; FAIL=$((FAIL+1)); }
# ... assertions writing only into $TMP ...
echo "结果: PASS=$PASS FAIL=$FAIL"
[ "$FAIL" -eq 0 ]
Cover the happy path and the guardrails (bad arguments, overwrite refusal, precondition failures). When a feature has two code paths (e.g. two backend tools), test both, and skip with a visible message when a path's dependency is unavailable rather than silently passing.
These are in-session soft guidance; the final enforcement is the repo's shellcheck / CI / PR review.