Skip to content

[Bug] mise: lint:shell never runs shellcheck — find rejects the escaped -exec terminator #398

Description

@laurigates

What

mise run lint:shell fails immediately without checking a single file:

[lint:shell] $ find . -name "*.sh" -not -path "./node_modules/*" -exec shellche…
find: -exec: no terminating ";" or "+"
[lint:shell] ERROR task failed

The task in private_dot_config/mise/config.toml.tmpl (and the rendered
~/.config/mise/config.toml, line 342) is:

run = 'find . -name "*.sh" -not -path "./node_modules/*" -exec shellcheck {} \;'

The single-quoted TOML literal keeps both backslashes, so find never sees a
bare \; or + terminator.

Why it matters

mise run lint aggregates the sub-linters, so the shell tier is silently
contributing nothing. .claude/rules/testing.md lists mise run lint:shell as
the tier to run after modifying shell scripts — it has not actually been running
shellcheck. The repo's pre-commit shellcheck hook still covers staged files, so
this is a gap in the local tier, not in CI.

Repro

mise run lint:shell

Fix sketch

Either drop one level of escaping (-exec shellcheck {} \;) or switch to
-exec shellcheck {} +, which is also one process instead of N. Verify with a
deliberately broken script that the task actually reports it — an exit 0 on a
sweep that checked zero files looks identical to a clean run.

Provenance

Found while verifying #397; the same line is present on
main, so it is not a regression from that branch.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions