shuck
shuck

A fast shell script linter, built in Rust. Checks for correctness, portability, and style issues in your shell scripts, with a built-in LSP server for editor integration.

Install

cargo install shuck-cli

Usage

shuck check .

LSP Server

shuck server
shuck check --select S deploy.sh
warning[S001]: quote parameter expansions to avoid word splitting and globbing
--> deploy.sh:3:10
|
3 | rm -rf $build_dir
| ^^^^^^^^^^
|
 
warning[S014]: quote star-splat expansions to preserve argument boundaries
--> deploy.sh:7:12
|
7 | for arg in $*; do
| ^^
|
 
warning[S005]: prefer `$(...)` over legacy backtick substitution
--> deploy.sh:12:10
|
12 | local v=`git describe`
| ^^^^^^^^^^^^^^^
|

Fast

Built in Rust with per-file caching. Lints thousands of shell scripts in seconds.

Compatible

Supports ShellCheck suppression directives and SC codes. Migrate incrementally without rewriting your existing inline annotations.

Multi-Shell

Lint bash, sh, dash, ksh, mksh, and zsh scripts. Real parser support for each dialect, not just regex matching.

Integrated

Works with your editor through the built-in LSP server, plus CI pipelines and pre-commit hooks. One binary, zero dependencies.