@fredlackey/devutils 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
|
@@ -0,0 +1,1005 @@
|
|
|
1
|
+
# Installing ShellCheck
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ShellCheck is a static analysis tool for shell scripts. It analyzes Bash and POSIX sh scripts, identifying syntax issues, semantic problems, and subtle pitfalls that can cause scripts to fail unexpectedly. Think of ShellCheck as a linter for shell scripts - it catches common mistakes, suggests best practices, and helps you write more robust shell code.
|
|
6
|
+
|
|
7
|
+
ShellCheck is essential for developers, system administrators, and DevOps engineers who write shell scripts. Common use cases include:
|
|
8
|
+
|
|
9
|
+
- Catching common syntax errors before they cause runtime failures
|
|
10
|
+
- Identifying deprecated or non-portable shell constructs
|
|
11
|
+
- Enforcing shell scripting best practices
|
|
12
|
+
- Integrating linting into CI/CD pipelines for shell scripts
|
|
13
|
+
- Learning proper shell scripting patterns through actionable feedback
|
|
14
|
+
|
|
15
|
+
ShellCheck supports Bash, sh, dash, and ksh scripts. It does not support zsh scripts.
|
|
16
|
+
|
|
17
|
+
## Dependencies
|
|
18
|
+
|
|
19
|
+
### macOS (Homebrew)
|
|
20
|
+
- **Required:**
|
|
21
|
+
- Homebrew - Install via `dev install homebrew` or see installation steps below
|
|
22
|
+
- **Optional:** None
|
|
23
|
+
- **Auto-installed:**
|
|
24
|
+
- `gmp` (GNU multiple precision arithmetic library) - Automatically installed by Homebrew as a dependency
|
|
25
|
+
|
|
26
|
+
### Ubuntu (APT/Snap)
|
|
27
|
+
- **Required:** None (APT is built into Ubuntu/Debian distributions)
|
|
28
|
+
- **Optional:** None
|
|
29
|
+
- **Auto-installed:** All package dependencies are automatically handled by APT
|
|
30
|
+
|
|
31
|
+
### Raspberry Pi OS (APT/Snap)
|
|
32
|
+
- **Required:** None (APT is built into Raspberry Pi OS/Debian distributions)
|
|
33
|
+
- **Optional:** None
|
|
34
|
+
- **Auto-installed:** All package dependencies are automatically handled by APT
|
|
35
|
+
|
|
36
|
+
### Amazon Linux (DNF/YUM)
|
|
37
|
+
|
|
38
|
+
**For Amazon Linux 2023 (DNF):**
|
|
39
|
+
- **Required:**
|
|
40
|
+
- `curl` - Install via `sudo dnf install -y curl` (typically pre-installed)
|
|
41
|
+
- `xz` - Install via `sudo dnf install -y xz` (required for extracting tarball)
|
|
42
|
+
- **Optional:** None
|
|
43
|
+
- **Auto-installed:** None (direct binary installation from GitHub)
|
|
44
|
+
|
|
45
|
+
**For Amazon Linux 2 (YUM):**
|
|
46
|
+
- **Required:**
|
|
47
|
+
- `amazon-linux-extras` - Pre-installed on Amazon Linux 2 (used to enable EPEL repository)
|
|
48
|
+
- **Optional:** None
|
|
49
|
+
- **Auto-installed:** All EPEL and ShellCheck package dependencies are automatically handled by YUM
|
|
50
|
+
|
|
51
|
+
### Windows (Chocolatey)
|
|
52
|
+
- **Required:**
|
|
53
|
+
- Chocolatey - Install via `dev install chocolatey` or see installation steps below
|
|
54
|
+
- **Optional:** None
|
|
55
|
+
- **Auto-installed:** None (binary installation managed by Chocolatey)
|
|
56
|
+
|
|
57
|
+
### Git Bash (Manual/Portable)
|
|
58
|
+
- **Required:**
|
|
59
|
+
- `curl` - Pre-installed with Git for Windows
|
|
60
|
+
- `unzip` - Pre-installed with Git for Windows
|
|
61
|
+
- Git for Windows (includes Git Bash) - Download from https://git-scm.com/download/win
|
|
62
|
+
- **Optional:** None
|
|
63
|
+
- **Auto-installed:** None (manual binary installation)
|
|
64
|
+
|
|
65
|
+
## Prerequisites
|
|
66
|
+
|
|
67
|
+
Before installing ShellCheck on any platform, ensure:
|
|
68
|
+
|
|
69
|
+
1. **Internet connectivity** - Required to download packages
|
|
70
|
+
2. **Administrative privileges** - Required on most platforms for system-wide installation
|
|
71
|
+
3. **Package manager installed** - Each platform requires its respective package manager (Homebrew, APT, DNF/YUM, Chocolatey, etc.)
|
|
72
|
+
|
|
73
|
+
## Platform-Specific Installation
|
|
74
|
+
|
|
75
|
+
### macOS (Homebrew)
|
|
76
|
+
|
|
77
|
+
#### Prerequisites
|
|
78
|
+
|
|
79
|
+
- macOS 10.15 (Catalina) or later (macOS 14 Sonoma or later recommended)
|
|
80
|
+
- Homebrew package manager installed
|
|
81
|
+
- Terminal access
|
|
82
|
+
|
|
83
|
+
If Homebrew is not installed, install it first:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Installation Steps
|
|
90
|
+
|
|
91
|
+
Run the following command to install ShellCheck via Homebrew:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
brew install --quiet shellcheck
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The `--quiet` flag suppresses non-essential output, making the command suitable for automation scripts and CI/CD pipelines.
|
|
98
|
+
|
|
99
|
+
**Note**: Homebrew will automatically install the dependency `gmp` (GNU multiple precision arithmetic library) if it is not already present.
|
|
100
|
+
|
|
101
|
+
#### Verification
|
|
102
|
+
|
|
103
|
+
Confirm the installation succeeded:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
shellcheck --version
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Expected output (version numbers may vary):
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
ShellCheck - shell script analysis tool
|
|
113
|
+
version: 0.11.0
|
|
114
|
+
license: GNU General Public License, version 3
|
|
115
|
+
website: https://www.shellcheck.net
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Verify the installation path:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
which shellcheck
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Expected output: `/opt/homebrew/bin/shellcheck` (Apple Silicon) or `/usr/local/bin/shellcheck` (Intel).
|
|
125
|
+
|
|
126
|
+
Test ShellCheck on a sample script:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
echo '#!/bin/bash
|
|
130
|
+
echo $foo' | shellcheck -
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Expected output showing a warning about unquoted variable:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
In - line 2:
|
|
137
|
+
echo $foo
|
|
138
|
+
^--^ SC2086 (info): Double quote to prevent globbing and word splitting.
|
|
139
|
+
|
|
140
|
+
Did you mean:
|
|
141
|
+
echo "$foo"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Troubleshooting
|
|
145
|
+
|
|
146
|
+
**Problem**: `shellcheck: command not found` after installation
|
|
147
|
+
|
|
148
|
+
**Solution**: Homebrew may not be in your PATH. For Apple Silicon Macs, add Homebrew to your PATH:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
eval "$(/opt/homebrew/bin/brew shellenv)"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
For a permanent fix, add this to your shell configuration:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc && source ~/.zshrc
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Problem**: `brew install shellcheck` fails with permission errors
|
|
161
|
+
|
|
162
|
+
**Solution**: Fix Homebrew directory ownership:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
sudo chown -R $(whoami) $(brew --prefix)/*
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Problem**: Installation fails with network errors
|
|
169
|
+
|
|
170
|
+
**Solution**: Check your internet connection and try again. If behind a corporate proxy, configure Homebrew to use it:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
export ALL_PROXY=http://proxy.example.com:8080
|
|
174
|
+
brew install --quiet shellcheck
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
### Ubuntu/Debian (APT)
|
|
180
|
+
|
|
181
|
+
#### Prerequisites
|
|
182
|
+
|
|
183
|
+
- Ubuntu 18.04 LTS or later, or Debian 10 (Buster) or later
|
|
184
|
+
- sudo privileges
|
|
185
|
+
- Internet connectivity
|
|
186
|
+
|
|
187
|
+
ShellCheck is available in the default Ubuntu and Debian repositories. For newer versions, use the Snap package (documented in the Snap alternative section).
|
|
188
|
+
|
|
189
|
+
#### Installation Steps
|
|
190
|
+
|
|
191
|
+
Run the following command to update package lists and install ShellCheck:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y shellcheck
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
|
|
198
|
+
|
|
199
|
+
#### Verification
|
|
200
|
+
|
|
201
|
+
Confirm the installation succeeded:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
shellcheck --version
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Expected output (version numbers may vary depending on your distribution version):
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
ShellCheck - shell script analysis tool
|
|
211
|
+
version: 0.8.0
|
|
212
|
+
license: GNU General Public License, version 3
|
|
213
|
+
website: https://www.shellcheck.net
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Note**: Ubuntu and Debian repositories may contain slightly older versions of ShellCheck. For Ubuntu 22.04 LTS, the repository provides version 0.8.0. If you require the latest version (0.11.0), use the Snap package or download the binary directly.
|
|
217
|
+
|
|
218
|
+
Verify the installation path:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
which shellcheck
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Expected output: `/usr/bin/shellcheck`
|
|
225
|
+
|
|
226
|
+
Test ShellCheck on a sample script:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
echo '#!/bin/bash
|
|
230
|
+
echo $foo' | shellcheck -
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
#### Troubleshooting
|
|
234
|
+
|
|
235
|
+
**Problem**: `E: Unable to locate package shellcheck`
|
|
236
|
+
|
|
237
|
+
**Solution**: Update the package list first:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Problem**: `Permission denied` errors
|
|
244
|
+
|
|
245
|
+
**Solution**: Ensure you are using `sudo` with the installation command.
|
|
246
|
+
|
|
247
|
+
**Problem**: Older ShellCheck version than expected
|
|
248
|
+
|
|
249
|
+
**Solution**: Ubuntu/Debian repositories prioritize stability over bleeding-edge releases. For the latest version, install via Snap:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
sudo snap install shellcheck
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Or download the binary directly from GitHub:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.x86_64.tar.xz" | tar -xJv && sudo cp shellcheck-v0.11.0/shellcheck /usr/local/bin/ && rm -rf shellcheck-v0.11.0
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
### Raspberry Pi OS (APT)
|
|
264
|
+
|
|
265
|
+
#### Prerequisites
|
|
266
|
+
|
|
267
|
+
- Raspberry Pi OS (32-bit or 64-bit)
|
|
268
|
+
- Raspberry Pi 2 or later (Raspberry Pi 3B+ or later recommended for 64-bit)
|
|
269
|
+
- sudo privileges
|
|
270
|
+
- Internet connectivity
|
|
271
|
+
|
|
272
|
+
Raspberry Pi OS is based on Debian, so ShellCheck installation follows the same APT-based process. ShellCheck is available for both ARM architectures (armhf for 32-bit, arm64 for 64-bit).
|
|
273
|
+
|
|
274
|
+
#### Installation Steps
|
|
275
|
+
|
|
276
|
+
Run the following command to update package lists and install ShellCheck:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y shellcheck
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
|
|
283
|
+
|
|
284
|
+
#### Verification
|
|
285
|
+
|
|
286
|
+
Confirm the installation succeeded:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
shellcheck --version
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Expected output (version numbers may vary):
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
ShellCheck - shell script analysis tool
|
|
296
|
+
version: 0.8.0
|
|
297
|
+
license: GNU General Public License, version 3
|
|
298
|
+
website: https://www.shellcheck.net
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Verify your architecture:
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
uname -m
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Expected output: `aarch64` (64-bit) or `armv7l` (32-bit).
|
|
308
|
+
|
|
309
|
+
Verify the installation path:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
which shellcheck
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Expected output: `/usr/bin/shellcheck`
|
|
316
|
+
|
|
317
|
+
#### Troubleshooting
|
|
318
|
+
|
|
319
|
+
**Problem**: `E: Unable to locate package shellcheck`
|
|
320
|
+
|
|
321
|
+
**Solution**: Update the package list first:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
If still not found, ShellCheck may not be in the repository for older Raspberry Pi OS versions. Use Snap instead:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y snapd && sudo snap install shellcheck
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**Problem**: Very slow download speeds
|
|
334
|
+
|
|
335
|
+
**Solution**: Raspberry Pi may have limited bandwidth. Use a wired ethernet connection for faster downloads, or wait for the installation to complete.
|
|
336
|
+
|
|
337
|
+
**Problem**: Installation fails with disk space errors
|
|
338
|
+
|
|
339
|
+
**Solution**: Check available disk space and clean up if needed:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
df -h
|
|
343
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get autoremove -y
|
|
344
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get clean
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**Problem**: Need latest ShellCheck version on ARM
|
|
348
|
+
|
|
349
|
+
**Solution**: For 64-bit ARM (aarch64), download the ARM64 binary directly from GitHub:
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.aarch64.tar.xz" | tar -xJv && sudo cp shellcheck-v0.11.0/shellcheck /usr/local/bin/ && rm -rf shellcheck-v0.11.0
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
For 32-bit ARM (armv7l), download the armv6hf binary:
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.armv6hf.tar.xz" | tar -xJv && sudo cp shellcheck-v0.11.0/shellcheck /usr/local/bin/ && rm -rf shellcheck-v0.11.0
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
### Amazon Linux (DNF/YUM)
|
|
364
|
+
|
|
365
|
+
#### Prerequisites
|
|
366
|
+
|
|
367
|
+
- Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
|
|
368
|
+
- sudo privileges
|
|
369
|
+
- Internet connectivity
|
|
370
|
+
|
|
371
|
+
ShellCheck is not available in the default Amazon Linux repositories. Install it via EPEL (Extra Packages for Enterprise Linux) for Amazon Linux 2, or download the binary directly for Amazon Linux 2023.
|
|
372
|
+
|
|
373
|
+
#### Installation Steps
|
|
374
|
+
|
|
375
|
+
**For Amazon Linux 2023:**
|
|
376
|
+
|
|
377
|
+
Amazon Linux 2023 does not have EPEL compatibility. Download the binary directly:
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.x86_64.tar.xz" | tar -xJv && sudo cp shellcheck-v0.11.0/shellcheck /usr/local/bin/ && rm -rf shellcheck-v0.11.0
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
**For Amazon Linux 2:**
|
|
384
|
+
|
|
385
|
+
Enable the EPEL repository and install ShellCheck:
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
sudo amazon-linux-extras install -y epel && sudo yum install -y ShellCheck
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**Note**: The package name is `ShellCheck` (with capital S and C) in the EPEL repository, not `shellcheck`.
|
|
392
|
+
|
|
393
|
+
The `-y` flag automatically confirms installation prompts, enabling non-interactive execution.
|
|
394
|
+
|
|
395
|
+
#### Verification
|
|
396
|
+
|
|
397
|
+
Confirm the installation succeeded:
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
shellcheck --version
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Expected output (version numbers may vary):
|
|
404
|
+
|
|
405
|
+
```
|
|
406
|
+
ShellCheck - shell script analysis tool
|
|
407
|
+
version: 0.11.0
|
|
408
|
+
license: GNU General Public License, version 3
|
|
409
|
+
website: https://www.shellcheck.net
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
For EPEL installations on Amazon Linux 2, the version may be older (0.7.x or 0.8.x).
|
|
413
|
+
|
|
414
|
+
Verify the installation path:
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
which shellcheck
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
Expected output: `/usr/local/bin/shellcheck` (binary install) or `/usr/bin/shellcheck` (EPEL install).
|
|
421
|
+
|
|
422
|
+
#### Troubleshooting
|
|
423
|
+
|
|
424
|
+
**Problem**: `No match for argument: ShellCheck` on Amazon Linux 2
|
|
425
|
+
|
|
426
|
+
**Solution**: Ensure EPEL is enabled:
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
sudo amazon-linux-extras install -y epel
|
|
430
|
+
sudo yum makecache
|
|
431
|
+
sudo yum install -y ShellCheck
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
**Problem**: `No match for argument: ShellCheck` on Amazon Linux 2023
|
|
435
|
+
|
|
436
|
+
**Solution**: Amazon Linux 2023 does not support EPEL. Download the binary directly:
|
|
437
|
+
|
|
438
|
+
```bash
|
|
439
|
+
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.x86_64.tar.xz" | tar -xJv && sudo cp shellcheck-v0.11.0/shellcheck /usr/local/bin/ && rm -rf shellcheck-v0.11.0
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
**Problem**: `wget: command not found`
|
|
443
|
+
|
|
444
|
+
**Solution**: Use curl instead:
|
|
445
|
+
|
|
446
|
+
```bash
|
|
447
|
+
curl -sSL "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.x86_64.tar.xz" | tar -xJv && sudo cp shellcheck-v0.11.0/shellcheck /usr/local/bin/ && rm -rf shellcheck-v0.11.0
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
**Problem**: `tar: xz: Cannot exec: No such file or directory`
|
|
451
|
+
|
|
452
|
+
**Solution**: Install xz-utils first:
|
|
453
|
+
|
|
454
|
+
```bash
|
|
455
|
+
sudo dnf install -y xz
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
Or for Amazon Linux 2:
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
sudo yum install -y xz
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
**Problem**: Permission denied when running shellcheck
|
|
465
|
+
|
|
466
|
+
**Solution**: Ensure the binary has execute permissions:
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
sudo chmod +x /usr/local/bin/shellcheck
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
**Problem**: Using ARM-based instances (Graviton)
|
|
473
|
+
|
|
474
|
+
**Solution**: Download the ARM64 binary:
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.aarch64.tar.xz" | tar -xJv && sudo cp shellcheck-v0.11.0/shellcheck /usr/local/bin/ && rm -rf shellcheck-v0.11.0
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
### Windows (Chocolatey)
|
|
483
|
+
|
|
484
|
+
#### Prerequisites
|
|
485
|
+
|
|
486
|
+
- Windows 10 (version 1803+) or Windows 11
|
|
487
|
+
- Chocolatey package manager installed
|
|
488
|
+
- Administrator PowerShell or Command Prompt
|
|
489
|
+
|
|
490
|
+
If Chocolatey is not installed, install it first by running this command in an Administrator PowerShell:
|
|
491
|
+
|
|
492
|
+
```powershell
|
|
493
|
+
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
#### Installation Steps
|
|
497
|
+
|
|
498
|
+
Run the following command in an Administrator PowerShell or Command Prompt:
|
|
499
|
+
|
|
500
|
+
```powershell
|
|
501
|
+
choco install shellcheck -y
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
|
|
505
|
+
|
|
506
|
+
Chocolatey downloads the Windows binary and adds it to the PATH automatically.
|
|
507
|
+
|
|
508
|
+
#### Verification
|
|
509
|
+
|
|
510
|
+
Open a **new** Command Prompt or PowerShell window (required for PATH to update), then run:
|
|
511
|
+
|
|
512
|
+
```powershell
|
|
513
|
+
shellcheck --version
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
Expected output (version numbers may vary):
|
|
517
|
+
|
|
518
|
+
```
|
|
519
|
+
ShellCheck - shell script analysis tool
|
|
520
|
+
version: 0.9.0
|
|
521
|
+
license: GNU General Public License, version 3
|
|
522
|
+
website: https://www.shellcheck.net
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
**Note**: The Chocolatey package may be slightly behind the latest release. As of the documentation date, Chocolatey provides version 0.9.0 while the latest is 0.11.0.
|
|
526
|
+
|
|
527
|
+
Verify the installation path:
|
|
528
|
+
|
|
529
|
+
```powershell
|
|
530
|
+
where shellcheck
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
Expected output: `C:\ProgramData\chocolatey\bin\shellcheck.exe`
|
|
534
|
+
|
|
535
|
+
#### Troubleshooting
|
|
536
|
+
|
|
537
|
+
**Problem**: `shellcheck` command not found after installation
|
|
538
|
+
|
|
539
|
+
**Solution**: Close all terminal windows and open a new Command Prompt or PowerShell. The PATH update requires a fresh terminal session.
|
|
540
|
+
|
|
541
|
+
**Problem**: `choco` command not found
|
|
542
|
+
|
|
543
|
+
**Solution**: Chocolatey may not be in PATH. Close all terminal windows, open a new Administrator PowerShell, and try again. If the issue persists, reinstall Chocolatey.
|
|
544
|
+
|
|
545
|
+
**Problem**: Installation fails with access denied
|
|
546
|
+
|
|
547
|
+
**Solution**: Ensure you are running PowerShell or Command Prompt as Administrator. Right-click and select "Run as administrator".
|
|
548
|
+
|
|
549
|
+
**Problem**: Need the latest ShellCheck version
|
|
550
|
+
|
|
551
|
+
**Solution**: The Chocolatey package may lag behind releases. For the absolute latest version, use winget or download the binary manually:
|
|
552
|
+
|
|
553
|
+
Using winget:
|
|
554
|
+
|
|
555
|
+
```powershell
|
|
556
|
+
winget install --id koalaman.shellcheck --silent --accept-package-agreements --accept-source-agreements
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
Manual download:
|
|
560
|
+
|
|
561
|
+
```powershell
|
|
562
|
+
Invoke-WebRequest -Uri "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.zip" -OutFile "$env:TEMP\shellcheck.zip"
|
|
563
|
+
Expand-Archive -Path "$env:TEMP\shellcheck.zip" -DestinationPath "$env:TEMP\shellcheck" -Force
|
|
564
|
+
Copy-Item "$env:TEMP\shellcheck\shellcheck-v0.11.0.exe" -Destination "C:\Windows\System32\shellcheck.exe"
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
### WSL (Ubuntu)
|
|
570
|
+
|
|
571
|
+
#### Prerequisites
|
|
572
|
+
|
|
573
|
+
- Windows 10 version 2004+ or Windows 11
|
|
574
|
+
- Windows Subsystem for Linux (WSL) with Ubuntu installed
|
|
575
|
+
- WSL 2 recommended for best performance
|
|
576
|
+
- sudo privileges within WSL
|
|
577
|
+
|
|
578
|
+
WSL Ubuntu installations follow the same process as native Ubuntu, using APT.
|
|
579
|
+
|
|
580
|
+
#### Installation Steps
|
|
581
|
+
|
|
582
|
+
Open your WSL Ubuntu terminal and run:
|
|
583
|
+
|
|
584
|
+
```bash
|
|
585
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y shellcheck
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
|
|
589
|
+
|
|
590
|
+
#### Verification
|
|
591
|
+
|
|
592
|
+
Confirm the installation succeeded:
|
|
593
|
+
|
|
594
|
+
```bash
|
|
595
|
+
shellcheck --version
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
Expected output (version numbers may vary):
|
|
599
|
+
|
|
600
|
+
```
|
|
601
|
+
ShellCheck - shell script analysis tool
|
|
602
|
+
version: 0.8.0
|
|
603
|
+
license: GNU General Public License, version 3
|
|
604
|
+
website: https://www.shellcheck.net
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
Verify the installation path:
|
|
608
|
+
|
|
609
|
+
```bash
|
|
610
|
+
which shellcheck
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
Expected output: `/usr/bin/shellcheck`
|
|
614
|
+
|
|
615
|
+
Test ShellCheck on a sample script:
|
|
616
|
+
|
|
617
|
+
```bash
|
|
618
|
+
echo '#!/bin/bash
|
|
619
|
+
echo $foo' | shellcheck -
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
#### Troubleshooting
|
|
623
|
+
|
|
624
|
+
**Problem**: `E: Unable to locate package shellcheck`
|
|
625
|
+
|
|
626
|
+
**Solution**: Update the package list first:
|
|
627
|
+
|
|
628
|
+
```bash
|
|
629
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
**Problem**: WSL itself is not installed
|
|
633
|
+
|
|
634
|
+
**Solution**: Install WSL from an Administrator PowerShell on Windows:
|
|
635
|
+
|
|
636
|
+
```powershell
|
|
637
|
+
wsl --install
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
Restart your computer after installation.
|
|
641
|
+
|
|
642
|
+
**Problem**: Network connectivity issues in WSL
|
|
643
|
+
|
|
644
|
+
**Solution**: WSL may have DNS resolution issues. Try restarting WSL:
|
|
645
|
+
|
|
646
|
+
```powershell
|
|
647
|
+
# From Windows PowerShell
|
|
648
|
+
wsl --shutdown
|
|
649
|
+
wsl
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
**Problem**: Need the latest ShellCheck version in WSL
|
|
653
|
+
|
|
654
|
+
**Solution**: Download the latest binary directly:
|
|
655
|
+
|
|
656
|
+
```bash
|
|
657
|
+
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.linux.x86_64.tar.xz" | tar -xJv && sudo cp shellcheck-v0.11.0/shellcheck /usr/local/bin/ && rm -rf shellcheck-v0.11.0
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
---
|
|
661
|
+
|
|
662
|
+
### Git Bash (Manual/Portable)
|
|
663
|
+
|
|
664
|
+
#### Prerequisites
|
|
665
|
+
|
|
666
|
+
- Windows 10 or Windows 11
|
|
667
|
+
- Git for Windows installed (includes Git Bash)
|
|
668
|
+
- Internet connectivity
|
|
669
|
+
|
|
670
|
+
Git Bash does not include ShellCheck by default. You must download the Windows binary and place it in a directory included in Git Bash's PATH.
|
|
671
|
+
|
|
672
|
+
#### Installation Steps
|
|
673
|
+
|
|
674
|
+
Open Git Bash and run the following commands:
|
|
675
|
+
|
|
676
|
+
**Step 1: Create the local bin directory (if it does not exist)**
|
|
677
|
+
|
|
678
|
+
```bash
|
|
679
|
+
mkdir -p ~/bin
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
**Step 2: Download and extract the ShellCheck Windows binary**
|
|
683
|
+
|
|
684
|
+
```bash
|
|
685
|
+
curl -Lo ~/shellcheck.zip https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.zip && unzip -o ~/shellcheck.zip -d ~/bin && mv ~/bin/shellcheck-v0.11.0.exe ~/bin/shellcheck.exe && rm ~/shellcheck.zip
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
This downloads ShellCheck version 0.11.0 directly from the official GitHub releases and places it in your home bin directory.
|
|
689
|
+
|
|
690
|
+
**Step 3: Add ~/bin to PATH (if not already)**
|
|
691
|
+
|
|
692
|
+
Check if ~/bin is in your PATH:
|
|
693
|
+
|
|
694
|
+
```bash
|
|
695
|
+
echo $PATH | grep -q "$HOME/bin" && echo "Already in PATH" || echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
|
|
696
|
+
source ~/.bashrc
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
#### Verification
|
|
700
|
+
|
|
701
|
+
Confirm the installation succeeded:
|
|
702
|
+
|
|
703
|
+
```bash
|
|
704
|
+
shellcheck --version
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
Expected output:
|
|
708
|
+
|
|
709
|
+
```
|
|
710
|
+
ShellCheck - shell script analysis tool
|
|
711
|
+
version: 0.11.0
|
|
712
|
+
license: GNU General Public License, version 3
|
|
713
|
+
website: https://www.shellcheck.net
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
Verify ShellCheck is accessible:
|
|
717
|
+
|
|
718
|
+
```bash
|
|
719
|
+
which shellcheck
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
Expected output: `/c/Users/<your-username>/bin/shellcheck` or similar.
|
|
723
|
+
|
|
724
|
+
Test ShellCheck on a sample script:
|
|
725
|
+
|
|
726
|
+
```bash
|
|
727
|
+
echo '#!/bin/bash
|
|
728
|
+
echo $foo' | shellcheck -
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
#### Troubleshooting
|
|
732
|
+
|
|
733
|
+
**Problem**: `shellcheck: command not found`
|
|
734
|
+
|
|
735
|
+
**Solution**: The `~/bin` directory may not be in Git Bash's PATH. Add it manually:
|
|
736
|
+
|
|
737
|
+
```bash
|
|
738
|
+
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
**Problem**: `unzip: command not found`
|
|
742
|
+
|
|
743
|
+
**Solution**: Git Bash includes unzip by default, but if missing, extract manually using Windows Explorer or install unzip:
|
|
744
|
+
|
|
745
|
+
```bash
|
|
746
|
+
# Alternative: Use PowerShell to extract
|
|
747
|
+
powershell -Command "Expand-Archive -Path '$HOME/shellcheck.zip' -DestinationPath '$HOME/bin' -Force"
|
|
748
|
+
mv ~/bin/shellcheck-v0.11.0.exe ~/bin/shellcheck.exe
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
**Problem**: Permission denied when downloading
|
|
752
|
+
|
|
753
|
+
**Solution**: Git Bash normally has network access. If behind a corporate proxy, configure Git Bash to use it:
|
|
754
|
+
|
|
755
|
+
```bash
|
|
756
|
+
export http_proxy=http://proxy.example.com:8080
|
|
757
|
+
export https_proxy=http://proxy.example.com:8080
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
**Problem**: SSL certificate errors during download
|
|
761
|
+
|
|
762
|
+
**Solution**: Update the CA certificates or use the `-k` flag (not recommended for production):
|
|
763
|
+
|
|
764
|
+
```bash
|
|
765
|
+
curl -kLo ~/shellcheck.zip https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.zip
|
|
766
|
+
```
|
|
767
|
+
|
|
768
|
+
**Problem**: Want to install to Git's built-in bin directory
|
|
769
|
+
|
|
770
|
+
**Solution**: Alternatively, copy to Git's usr/bin directory (requires running Git Bash as Administrator):
|
|
771
|
+
|
|
772
|
+
```bash
|
|
773
|
+
curl -Lo /tmp/shellcheck.zip https://github.com/koalaman/shellcheck/releases/download/v0.11.0/shellcheck-v0.11.0.zip && unzip -o /tmp/shellcheck.zip -d /tmp && cp /tmp/shellcheck-v0.11.0.exe /usr/bin/shellcheck.exe
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
---
|
|
777
|
+
|
|
778
|
+
## Post-Installation Configuration
|
|
779
|
+
|
|
780
|
+
ShellCheck works out of the box for most use cases. No additional configuration is typically required. The following optional configurations may be useful:
|
|
781
|
+
|
|
782
|
+
### Configuring Default Options
|
|
783
|
+
|
|
784
|
+
Create a `.shellcheckrc` file in your home directory or project root to set default options:
|
|
785
|
+
|
|
786
|
+
```bash
|
|
787
|
+
cat > ~/.shellcheckrc << 'EOF'
|
|
788
|
+
# Enable all optional checks
|
|
789
|
+
enable=all
|
|
790
|
+
|
|
791
|
+
# Exclude specific checks if needed
|
|
792
|
+
# disable=SC2034,SC2154
|
|
793
|
+
|
|
794
|
+
# Specify shell dialect (sh, bash, dash, ksh)
|
|
795
|
+
shell=bash
|
|
796
|
+
|
|
797
|
+
# Set source path for sourced files
|
|
798
|
+
# source-path=SCRIPTDIR
|
|
799
|
+
EOF
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
### Editor Integration
|
|
803
|
+
|
|
804
|
+
**VS Code**: Install the ShellCheck extension from the VS Code marketplace. The extension includes bundled binaries but will use your system ShellCheck if installed:
|
|
805
|
+
|
|
806
|
+
```bash
|
|
807
|
+
code --install-extension timonwong.shellcheck
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
**Vim/Neovim**: Add ShellCheck to ALE or Syntastic for real-time linting.
|
|
811
|
+
|
|
812
|
+
**Sublime Text**: Install the SublimeLinter-shellcheck package via Package Control.
|
|
813
|
+
|
|
814
|
+
### CI/CD Integration
|
|
815
|
+
|
|
816
|
+
Add ShellCheck to your CI/CD pipeline. Example for GitHub Actions:
|
|
817
|
+
|
|
818
|
+
```yaml
|
|
819
|
+
- name: Run ShellCheck
|
|
820
|
+
run: |
|
|
821
|
+
find . -name "*.sh" -type f | xargs shellcheck
|
|
822
|
+
```
|
|
823
|
+
|
|
824
|
+
Example for GitLab CI:
|
|
825
|
+
|
|
826
|
+
```yaml
|
|
827
|
+
shellcheck:
|
|
828
|
+
image: koalaman/shellcheck-alpine:stable
|
|
829
|
+
script:
|
|
830
|
+
- find . -name "*.sh" -type f | xargs shellcheck
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
### Shell Aliases
|
|
834
|
+
|
|
835
|
+
Create convenient aliases for common ShellCheck operations. Add to your shell configuration file (`~/.bashrc`, `~/.zshrc`, or `~/.bash_profile`):
|
|
836
|
+
|
|
837
|
+
```bash
|
|
838
|
+
# Check all shell scripts in current directory
|
|
839
|
+
alias scall='find . -name "*.sh" -type f | xargs shellcheck'
|
|
840
|
+
|
|
841
|
+
# Check with severity filter (only errors and warnings)
|
|
842
|
+
alias scerr='shellcheck -S error'
|
|
843
|
+
alias scwarn='shellcheck -S warning'
|
|
844
|
+
|
|
845
|
+
# Output in different formats
|
|
846
|
+
alias scjson='shellcheck -f json'
|
|
847
|
+
alias scgcc='shellcheck -f gcc'
|
|
848
|
+
```
|
|
849
|
+
|
|
850
|
+
### Test Your Installation
|
|
851
|
+
|
|
852
|
+
Verify ShellCheck can analyze scripts correctly:
|
|
853
|
+
|
|
854
|
+
```bash
|
|
855
|
+
echo '#!/bin/bash
|
|
856
|
+
for f in $(ls *.txt); do
|
|
857
|
+
echo $f
|
|
858
|
+
done' | shellcheck -
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
Expected output showing multiple warnings:
|
|
862
|
+
|
|
863
|
+
```
|
|
864
|
+
In - line 2:
|
|
865
|
+
for f in $(ls *.txt); do
|
|
866
|
+
^---------^ SC2045 (warning): Iterating over ls output is fragile. Use globs.
|
|
867
|
+
^---^ SC2035 (info): Use ./*glob* or -- *glob* so names with dashes won't become options.
|
|
868
|
+
|
|
869
|
+
In - line 3:
|
|
870
|
+
echo $f
|
|
871
|
+
^-- SC2086 (info): Double quote to prevent globbing and word splitting.
|
|
872
|
+
|
|
873
|
+
Did you mean:
|
|
874
|
+
echo "$f"
|
|
875
|
+
```
|
|
876
|
+
|
|
877
|
+
---
|
|
878
|
+
|
|
879
|
+
## Common Issues
|
|
880
|
+
|
|
881
|
+
### Issue: "SC2086: Double quote to prevent globbing and word splitting"
|
|
882
|
+
|
|
883
|
+
**Symptoms**: ShellCheck warns about unquoted variables.
|
|
884
|
+
|
|
885
|
+
**Solution**: Quote your variables to prevent word splitting and globbing:
|
|
886
|
+
|
|
887
|
+
```bash
|
|
888
|
+
# Before
|
|
889
|
+
echo $variable
|
|
890
|
+
|
|
891
|
+
# After
|
|
892
|
+
echo "$variable"
|
|
893
|
+
```
|
|
894
|
+
|
|
895
|
+
To disable this check for a specific line:
|
|
896
|
+
|
|
897
|
+
```bash
|
|
898
|
+
# shellcheck disable=SC2086
|
|
899
|
+
echo $variable
|
|
900
|
+
```
|
|
901
|
+
|
|
902
|
+
### Issue: "SC2034: Variable appears unused"
|
|
903
|
+
|
|
904
|
+
**Symptoms**: ShellCheck warns about variables that are actually used in sourced scripts.
|
|
905
|
+
|
|
906
|
+
**Solution**: Export the variable or disable the check:
|
|
907
|
+
|
|
908
|
+
```bash
|
|
909
|
+
# Option 1: Export the variable
|
|
910
|
+
export MY_VAR="value"
|
|
911
|
+
|
|
912
|
+
# Option 2: Disable check for this variable
|
|
913
|
+
# shellcheck disable=SC2034
|
|
914
|
+
MY_VAR="value"
|
|
915
|
+
```
|
|
916
|
+
|
|
917
|
+
### Issue: Checking scripts that source other files
|
|
918
|
+
|
|
919
|
+
**Symptoms**: ShellCheck cannot find sourced files and reports errors.
|
|
920
|
+
|
|
921
|
+
**Solution**: Use the `source-path` directive or the `-P` option:
|
|
922
|
+
|
|
923
|
+
```bash
|
|
924
|
+
# In .shellcheckrc
|
|
925
|
+
source-path=SCRIPTDIR
|
|
926
|
+
|
|
927
|
+
# Or on command line
|
|
928
|
+
shellcheck -P SCRIPTDIR script.sh
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
### Issue: Different shell dialect than expected
|
|
932
|
+
|
|
933
|
+
**Symptoms**: ShellCheck assumes wrong shell and reports incorrect warnings.
|
|
934
|
+
|
|
935
|
+
**Solution**: Add a shebang to your script or use the `-s` flag:
|
|
936
|
+
|
|
937
|
+
```bash
|
|
938
|
+
#!/bin/bash
|
|
939
|
+
# Script content here
|
|
940
|
+
|
|
941
|
+
# Or specify on command line
|
|
942
|
+
shellcheck -s bash script.sh
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
### Issue: Checking files without .sh extension
|
|
946
|
+
|
|
947
|
+
**Symptoms**: ShellCheck does not recognize files without standard extensions.
|
|
948
|
+
|
|
949
|
+
**Solution**: Pipe the file content to ShellCheck or use the shebang:
|
|
950
|
+
|
|
951
|
+
```bash
|
|
952
|
+
# Pipe content
|
|
953
|
+
shellcheck < myscript
|
|
954
|
+
|
|
955
|
+
# Or add shebang to file
|
|
956
|
+
#!/bin/bash
|
|
957
|
+
```
|
|
958
|
+
|
|
959
|
+
### Issue: Too many warnings to fix at once
|
|
960
|
+
|
|
961
|
+
**Symptoms**: Existing codebase has many warnings and fixing all at once is overwhelming.
|
|
962
|
+
|
|
963
|
+
**Solution**: Filter by severity and fix incrementally:
|
|
964
|
+
|
|
965
|
+
```bash
|
|
966
|
+
# Show only errors (most critical)
|
|
967
|
+
shellcheck -S error script.sh
|
|
968
|
+
|
|
969
|
+
# Show errors and warnings
|
|
970
|
+
shellcheck -S warning script.sh
|
|
971
|
+
|
|
972
|
+
# Exclude specific rules while fixing others
|
|
973
|
+
shellcheck --exclude=SC2086,SC2034 script.sh
|
|
974
|
+
```
|
|
975
|
+
|
|
976
|
+
### Issue: Using Docker instead of local installation
|
|
977
|
+
|
|
978
|
+
**Symptoms**: Cannot install ShellCheck locally or need consistent version across team.
|
|
979
|
+
|
|
980
|
+
**Solution**: Use the official Docker image:
|
|
981
|
+
|
|
982
|
+
```bash
|
|
983
|
+
docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable myscript.sh
|
|
984
|
+
```
|
|
985
|
+
|
|
986
|
+
For specific version:
|
|
987
|
+
|
|
988
|
+
```bash
|
|
989
|
+
docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:v0.11.0 myscript.sh
|
|
990
|
+
```
|
|
991
|
+
|
|
992
|
+
---
|
|
993
|
+
|
|
994
|
+
## References
|
|
995
|
+
|
|
996
|
+
- [ShellCheck Official Website](https://www.shellcheck.net/)
|
|
997
|
+
- [ShellCheck GitHub Repository](https://github.com/koalaman/shellcheck)
|
|
998
|
+
- [ShellCheck GitHub Releases](https://github.com/koalaman/shellcheck/releases)
|
|
999
|
+
- [ShellCheck Wiki](https://www.shellcheck.net/wiki/)
|
|
1000
|
+
- [ShellCheck Homebrew Formula](https://formulae.brew.sh/formula/shellcheck)
|
|
1001
|
+
- [ShellCheck Chocolatey Package](https://community.chocolatey.org/packages/shellcheck)
|
|
1002
|
+
- [ShellCheck Snap Package](https://snapcraft.io/shellcheck)
|
|
1003
|
+
- [ShellCheck VS Code Extension](https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck)
|
|
1004
|
+
- [ShellCheck Docker Hub](https://hub.docker.com/r/koalaman/shellcheck)
|
|
1005
|
+
- [ShellCheck Online Playground](https://www.shellcheck.net/)
|