@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.
Files changed (259) hide show
  1. package/README.md +5 -5
  2. package/package.json +1 -1
  3. package/src/commands/install.js +374 -36
  4. package/src/installs/adobe-creative-cloud.js +527 -25
  5. package/src/installs/adobe-creative-cloud.md +605 -0
  6. package/src/installs/appcleaner.js +303 -26
  7. package/src/installs/appcleaner.md +699 -0
  8. package/src/installs/apt-transport-https.js +390 -0
  9. package/src/installs/apt-transport-https.md +678 -0
  10. package/src/installs/atomicparsley.js +624 -26
  11. package/src/installs/atomicparsley.md +795 -0
  12. package/src/installs/aws-cli.js +779 -26
  13. package/src/installs/aws-cli.md +727 -0
  14. package/src/installs/balena-etcher.js +688 -26
  15. package/src/installs/balena-etcher.md +761 -0
  16. package/src/installs/bambu-studio.js +912 -26
  17. package/src/installs/bambu-studio.md +780 -0
  18. package/src/installs/bash-completion.js +554 -23
  19. package/src/installs/bash-completion.md +833 -0
  20. package/src/installs/bash.js +399 -26
  21. package/src/installs/bash.md +993 -0
  22. package/src/installs/beyond-compare.js +585 -26
  23. package/src/installs/beyond-compare.md +813 -0
  24. package/src/installs/build-essential.js +511 -26
  25. package/src/installs/build-essential.md +977 -0
  26. package/src/installs/ca-certificates.js +618 -0
  27. package/src/installs/ca-certificates.md +937 -0
  28. package/src/installs/caffeine.js +490 -26
  29. package/src/installs/caffeine.md +839 -0
  30. package/src/installs/camtasia.js +577 -25
  31. package/src/installs/camtasia.md +762 -0
  32. package/src/installs/chatgpt.js +458 -26
  33. package/src/installs/chatgpt.md +814 -0
  34. package/src/installs/chocolatey.js +447 -0
  35. package/src/installs/chocolatey.md +661 -0
  36. package/src/installs/chrome-canary.js +472 -26
  37. package/src/installs/chrome-canary.md +641 -0
  38. package/src/installs/chromium.js +645 -26
  39. package/src/installs/chromium.md +838 -0
  40. package/src/installs/claude-code.js +558 -26
  41. package/src/installs/claude-code.md +1173 -0
  42. package/src/installs/curl.js +361 -26
  43. package/src/installs/curl.md +714 -0
  44. package/src/installs/cursor.js +561 -26
  45. package/src/installs/cursor.md +970 -0
  46. package/src/installs/dbschema.js +674 -26
  47. package/src/installs/dbschema.md +925 -0
  48. package/src/installs/dependencies.md +435 -0
  49. package/src/installs/development-tools.js +600 -0
  50. package/src/installs/development-tools.md +977 -0
  51. package/src/installs/docker.js +1010 -25
  52. package/src/installs/docker.md +1109 -0
  53. package/src/installs/drawio.js +1001 -26
  54. package/src/installs/drawio.md +795 -0
  55. package/src/installs/elmedia-player.js +328 -25
  56. package/src/installs/elmedia-player.md +556 -0
  57. package/src/installs/ffmpeg.js +870 -25
  58. package/src/installs/ffmpeg.md +852 -0
  59. package/src/installs/file.js +464 -0
  60. package/src/installs/file.md +987 -0
  61. package/src/installs/gemini-cli.js +793 -26
  62. package/src/installs/gemini-cli.md +1153 -0
  63. package/src/installs/git.js +382 -26
  64. package/src/installs/git.md +907 -0
  65. package/src/installs/gitego.js +931 -26
  66. package/src/installs/gitego.md +1172 -0
  67. package/src/installs/go.js +913 -26
  68. package/src/installs/go.md +958 -0
  69. package/src/installs/google-chrome.js +801 -25
  70. package/src/installs/google-chrome.md +862 -0
  71. package/src/installs/gpg.js +412 -73
  72. package/src/installs/gpg.md +1056 -0
  73. package/src/installs/homebrew.js +1015 -26
  74. package/src/installs/homebrew.md +988 -0
  75. package/src/installs/imageoptim.js +950 -26
  76. package/src/installs/imageoptim.md +1119 -0
  77. package/src/installs/installers.json +2297 -0
  78. package/src/installs/jq.js +382 -26
  79. package/src/installs/jq.md +809 -0
  80. package/src/installs/keyboard-maestro.js +701 -26
  81. package/src/installs/keyboard-maestro.md +825 -0
  82. package/src/installs/latex.js +771 -26
  83. package/src/installs/latex.md +1095 -0
  84. package/src/installs/lftp.js +338 -26
  85. package/src/installs/lftp.md +907 -0
  86. package/src/installs/lsb-release.js +346 -0
  87. package/src/installs/lsb-release.md +814 -0
  88. package/src/installs/messenger.js +829 -26
  89. package/src/installs/messenger.md +900 -0
  90. package/src/installs/microsoft-office.js +550 -26
  91. package/src/installs/microsoft-office.md +760 -0
  92. package/src/installs/microsoft-teams.js +782 -25
  93. package/src/installs/microsoft-teams.md +886 -0
  94. package/src/installs/node.js +886 -26
  95. package/src/installs/node.md +1153 -0
  96. package/src/installs/nordpass.js +698 -26
  97. package/src/installs/nordpass.md +921 -0
  98. package/src/installs/nvm.js +977 -26
  99. package/src/installs/nvm.md +1057 -0
  100. package/src/installs/openssh.js +734 -64
  101. package/src/installs/openssh.md +1056 -0
  102. package/src/installs/pandoc.js +644 -26
  103. package/src/installs/pandoc.md +1036 -0
  104. package/src/installs/pinentry.js +492 -26
  105. package/src/installs/pinentry.md +1142 -0
  106. package/src/installs/pngyu.js +851 -26
  107. package/src/installs/pngyu.md +896 -0
  108. package/src/installs/postman.js +781 -26
  109. package/src/installs/postman.md +940 -0
  110. package/src/installs/procps.js +425 -0
  111. package/src/installs/procps.md +851 -0
  112. package/src/installs/safari-tech-preview.js +355 -25
  113. package/src/installs/safari-tech-preview.md +533 -0
  114. package/src/installs/sfnt2woff.js +640 -26
  115. package/src/installs/sfnt2woff.md +795 -0
  116. package/src/installs/shellcheck.js +463 -26
  117. package/src/installs/shellcheck.md +1005 -0
  118. package/src/installs/slack.js +722 -25
  119. package/src/installs/slack.md +865 -0
  120. package/src/installs/snagit.js +566 -25
  121. package/src/installs/snagit.md +844 -0
  122. package/src/installs/software-properties-common.js +372 -0
  123. package/src/installs/software-properties-common.md +805 -0
  124. package/src/installs/spotify.js +858 -25
  125. package/src/installs/spotify.md +901 -0
  126. package/src/installs/studio-3t.js +803 -26
  127. package/src/installs/studio-3t.md +918 -0
  128. package/src/installs/sublime-text.js +780 -25
  129. package/src/installs/sublime-text.md +914 -0
  130. package/src/installs/superwhisper.js +687 -25
  131. package/src/installs/superwhisper.md +630 -0
  132. package/src/installs/tailscale.js +727 -26
  133. package/src/installs/tailscale.md +1100 -0
  134. package/src/installs/tar.js +389 -0
  135. package/src/installs/tar.md +946 -0
  136. package/src/installs/termius.js +780 -26
  137. package/src/installs/termius.md +844 -0
  138. package/src/installs/terraform.js +761 -26
  139. package/src/installs/terraform.md +899 -0
  140. package/src/installs/tidal.js +752 -25
  141. package/src/installs/tidal.md +864 -0
  142. package/src/installs/tmux.js +328 -26
  143. package/src/installs/tmux.md +1030 -0
  144. package/src/installs/tree.js +393 -26
  145. package/src/installs/tree.md +833 -0
  146. package/src/installs/unzip.js +460 -0
  147. package/src/installs/unzip.md +879 -0
  148. package/src/installs/vim.js +403 -26
  149. package/src/installs/vim.md +1040 -0
  150. package/src/installs/vlc.js +803 -26
  151. package/src/installs/vlc.md +927 -0
  152. package/src/installs/vscode.js +825 -26
  153. package/src/installs/vscode.md +1002 -0
  154. package/src/installs/wget.js +415 -0
  155. package/src/installs/wget.md +791 -0
  156. package/src/installs/whatsapp.js +710 -25
  157. package/src/installs/whatsapp.md +854 -0
  158. package/src/installs/winpty.js +352 -0
  159. package/src/installs/winpty.md +620 -0
  160. package/src/installs/woff2.js +535 -26
  161. package/src/installs/woff2.md +977 -0
  162. package/src/installs/wsl.js +572 -0
  163. package/src/installs/wsl.md +699 -0
  164. package/src/installs/xcode-clt.js +520 -0
  165. package/src/installs/xcode-clt.md +351 -0
  166. package/src/installs/xcode.js +542 -26
  167. package/src/installs/xcode.md +573 -0
  168. package/src/installs/yarn.js +806 -26
  169. package/src/installs/yarn.md +1074 -0
  170. package/src/installs/yq.js +636 -26
  171. package/src/installs/yq.md +944 -0
  172. package/src/installs/yt-dlp.js +683 -26
  173. package/src/installs/yt-dlp.md +946 -0
  174. package/src/installs/yum-utils.js +297 -0
  175. package/src/installs/yum-utils.md +648 -0
  176. package/src/installs/zoom.js +740 -25
  177. package/src/installs/zoom.md +884 -0
  178. package/src/scripts/README.md +567 -45
  179. package/src/scripts/STATUS.md +208 -0
  180. package/src/scripts/afk.js +395 -7
  181. package/src/scripts/backup-all.js +731 -9
  182. package/src/scripts/backup-source.js +711 -8
  183. package/src/scripts/brewd.js +373 -7
  184. package/src/scripts/brewi.js +505 -9
  185. package/src/scripts/brewr.js +512 -9
  186. package/src/scripts/brews.js +462 -9
  187. package/src/scripts/brewu.js +488 -7
  188. package/src/scripts/c.js +185 -7
  189. package/src/scripts/ccurl.js +325 -8
  190. package/src/scripts/certbot-crontab-init.js +488 -8
  191. package/src/scripts/certbot-init.js +641 -9
  192. package/src/scripts/ch.js +339 -7
  193. package/src/scripts/claude-danger.js +253 -8
  194. package/src/scripts/clean-dev.js +419 -8
  195. package/src/scripts/clear-dns-cache.js +525 -7
  196. package/src/scripts/clone.js +417 -7
  197. package/src/scripts/code-all.js +420 -7
  198. package/src/scripts/count-files.js +195 -8
  199. package/src/scripts/count-folders.js +195 -8
  200. package/src/scripts/count.js +248 -8
  201. package/src/scripts/d.js +203 -7
  202. package/src/scripts/datauri.js +373 -8
  203. package/src/scripts/delete-files.js +363 -7
  204. package/src/scripts/docker-clean.js +410 -8
  205. package/src/scripts/dp.js +426 -7
  206. package/src/scripts/e.js +375 -9
  207. package/src/scripts/empty-trash.js +497 -7
  208. package/src/scripts/evm.js +428 -9
  209. package/src/scripts/fetch-github-repos.js +441 -10
  210. package/src/scripts/get-channel.js +329 -8
  211. package/src/scripts/get-course.js +384 -11
  212. package/src/scripts/get-dependencies.js +290 -9
  213. package/src/scripts/get-folder.js +783 -10
  214. package/src/scripts/get-tunes.js +411 -10
  215. package/src/scripts/get-video.js +352 -9
  216. package/src/scripts/git-backup.js +561 -9
  217. package/src/scripts/git-clone.js +477 -9
  218. package/src/scripts/git-pup.js +303 -7
  219. package/src/scripts/git-push.js +380 -8
  220. package/src/scripts/h.js +607 -9
  221. package/src/scripts/hide-desktop-icons.js +483 -7
  222. package/src/scripts/hide-hidden-files.js +522 -7
  223. package/src/scripts/install-dependencies-from.js +440 -9
  224. package/src/scripts/ips.js +647 -10
  225. package/src/scripts/iso.js +354 -8
  226. package/src/scripts/killni.js +561 -7
  227. package/src/scripts/ll.js +451 -8
  228. package/src/scripts/local-ip.js +310 -8
  229. package/src/scripts/m.js +508 -8
  230. package/src/scripts/map.js +293 -8
  231. package/src/scripts/mkd.js +287 -7
  232. package/src/scripts/ncu-update-all.js +441 -8
  233. package/src/scripts/nginx-init.js +702 -12
  234. package/src/scripts/npmi.js +366 -7
  235. package/src/scripts/o.js +495 -8
  236. package/src/scripts/org-by-date.js +321 -7
  237. package/src/scripts/p.js +208 -7
  238. package/src/scripts/packages.js +313 -8
  239. package/src/scripts/path.js +209 -7
  240. package/src/scripts/ports.js +582 -8
  241. package/src/scripts/q.js +290 -8
  242. package/src/scripts/refresh-files.js +378 -10
  243. package/src/scripts/remove-smaller-files.js +500 -8
  244. package/src/scripts/rename-files-with-date.js +517 -9
  245. package/src/scripts/resize-image.js +523 -9
  246. package/src/scripts/rm-safe.js +653 -8
  247. package/src/scripts/s.js +525 -9
  248. package/src/scripts/set-git-public.js +349 -7
  249. package/src/scripts/show-desktop-icons.js +459 -7
  250. package/src/scripts/show-hidden-files.js +456 -7
  251. package/src/scripts/tpa.js +265 -8
  252. package/src/scripts/tpo.js +264 -7
  253. package/src/scripts/u.js +489 -7
  254. package/src/scripts/vpush.js +422 -8
  255. package/src/scripts/y.js +267 -7
  256. package/src/utils/common/os.js +94 -2
  257. package/src/utils/ubuntu/apt.js +13 -7
  258. package/src/utils/windows/choco.js +82 -26
  259. package/src/utils/windows/winget.js +89 -27
@@ -0,0 +1,993 @@
1
+ # Installing Bash
2
+
3
+ ## Overview
4
+
5
+ Bash (Bourne-Again SHell) is a Unix shell and command language written by Brian Fox for the GNU Project. It is the default shell on most Linux distributions and was the default shell on macOS until Catalina (10.15). Bash provides a powerful command-line interface for interacting with your operating system, running scripts, and automating tasks.
6
+
7
+ Modern Bash (version 5.x) includes significant improvements over older versions, including associative arrays, better regular expression support, the `coproc` keyword for coprocesses, improved `case` statement features, and numerous bug fixes. macOS ships with Bash 3.2 due to GPL licensing restrictions, making an upgrade essential for developers who need modern shell features.
8
+
9
+ ## Dependencies
10
+
11
+ ### macOS (Homebrew)
12
+ - **Required:**
13
+ - Homebrew package manager - Install via `dev install homebrew` or directly from https://brew.sh
14
+ - Administrative privileges (sudo access) - Required for modifying `/etc/shells` and changing default shell
15
+ - Internet connectivity - Required to download packages from Homebrew repositories
16
+ - **Optional:** None
17
+ - **Auto-installed:**
18
+ - Xcode Command Line Tools - Homebrew automatically installs if missing
19
+ - Bash dependencies (ncurses, readline) - Homebrew handles these transparently
20
+
21
+ ### Ubuntu (APT/Snap)
22
+ - **Required:**
23
+ - APT package manager - Pre-installed on Ubuntu/Debian systems
24
+ - sudo privileges - Required for package installation and system modifications
25
+ - Internet connectivity - Required to download packages from APT repositories
26
+ - **Optional:** None
27
+ - **Auto-installed:**
28
+ - Bash dependencies (libc6, libtinfo6, readline libraries) - APT handles these transparently
29
+
30
+ ### Raspberry Pi OS (APT/Snap)
31
+ - **Required:**
32
+ - APT package manager - Pre-installed on Raspberry Pi OS
33
+ - sudo privileges - Required for package installation and system modifications
34
+ - Internet connectivity - Required to download packages from APT repositories
35
+ - **Optional:** None
36
+ - **Auto-installed:**
37
+ - Bash dependencies (libc6, libtinfo6, readline libraries) - APT handles these for ARM architecture transparently
38
+
39
+ ### Amazon Linux (DNF/YUM)
40
+ - **Required:**
41
+ - DNF (Amazon Linux 2023, RHEL 8/9) or YUM (Amazon Linux 2) package manager - Pre-installed on these systems
42
+ - sudo privileges - Required for package installation and system modifications
43
+ - Internet connectivity - Required to download packages from distribution repositories
44
+ - **Optional:** None
45
+ - **Auto-installed:**
46
+ - Bash dependencies (glibc, ncurses-libs, readline) - DNF/YUM handles these transparently
47
+
48
+ ### Windows (Chocolatey/winget)
49
+ - **Required:**
50
+ - Chocolatey package manager - Install via `dev install chocolatey` or from https://chocolatey.org/install
51
+ - Administrator privileges - Required for installing software system-wide
52
+ - Internet connectivity - Required to download Git for Windows package
53
+ - **Optional:** None
54
+ - **Auto-installed:**
55
+ - Git for Windows - Contains Git Bash (installed as the `git` package)
56
+ - MSYS2 runtime environment - Bundled with Git for Windows
57
+ - Common Unix utilities (grep, sed, awk, find, etc.) - Included with Git for Windows
58
+ - Bash 5.2.x - Bundled with Git for Windows
59
+
60
+ ### Git Bash (Manual/Portable)
61
+ - **Required:**
62
+ - Git for Windows already installed - Bash is bundled with this package
63
+ - **Optional:**
64
+ - Chocolatey package manager - Only needed for automated updates via `choco upgrade git -y`
65
+ - **Auto-installed:** None (Bash is already present if Git for Windows is installed)
66
+
67
+ ## Prerequisites
68
+
69
+ Before installing Bash on any platform, ensure:
70
+
71
+ 1. **Administrative privileges** - Required for system-wide installation and shell registration
72
+ 2. **Internet connectivity** - Required to download packages from repositories
73
+ 3. **Existing shell access** - You need a working terminal to run installation commands
74
+
75
+ ## Platform-Specific Installation
76
+
77
+ ### macOS (Homebrew)
78
+
79
+ #### Prerequisites
80
+
81
+ - macOS 11 (Big Sur) or later
82
+ - Homebrew package manager installed
83
+ - Terminal access
84
+
85
+ macOS ships with Bash 3.2, which is over 15 years old. Apple will not update the bundled Bash to version 4.0+ because newer versions are licensed under GPLv3, which Apple cannot distribute. Install a modern Bash via Homebrew to access current features.
86
+
87
+ If Homebrew is not installed, install it first:
88
+
89
+ ```bash
90
+ NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
91
+ ```
92
+
93
+ #### Installation Steps
94
+
95
+ Run the following command to install Bash 5.x:
96
+
97
+ ```bash
98
+ brew install --quiet bash
99
+ ```
100
+
101
+ The `--quiet` flag suppresses non-essential output, making the command suitable for automation scripts.
102
+
103
+ After installation, register the new Bash as an allowed shell and set it as your default:
104
+
105
+ ```bash
106
+ # Add Homebrew Bash to the list of allowed shells
107
+ # Use the correct path based on your Mac's architecture
108
+ BREW_BASH="$(brew --prefix)/bin/bash"
109
+ echo "$BREW_BASH" | sudo tee -a /etc/shells >/dev/null
110
+
111
+ # Set Homebrew Bash as your default shell
112
+ sudo chsh -s "$BREW_BASH" "$USER"
113
+ ```
114
+
115
+ **Note**: On Apple Silicon Macs (M1/M2/M3), the path is `/opt/homebrew/bin/bash`. On Intel Macs, the path is `/usr/local/bin/bash`. The command above automatically detects the correct path.
116
+
117
+ To suppress the deprecation warning when using Bash on macOS, add this line to your `~/.bash_profile`:
118
+
119
+ ```bash
120
+ echo 'export BASH_SILENCE_DEPRECATION_WARNING=1' >> ~/.bash_profile
121
+ ```
122
+
123
+ #### Verification
124
+
125
+ Confirm the installation succeeded:
126
+
127
+ ```bash
128
+ # Check the installed version
129
+ bash --version
130
+
131
+ # Verify the default shell path
132
+ echo "$SHELL"
133
+
134
+ # Verify Homebrew Bash is in the allowed shells list
135
+ grep "$(brew --prefix)/bin/bash" /etc/shells
136
+ ```
137
+
138
+ Expected output (version numbers may vary):
139
+
140
+ ```
141
+ GNU bash, version 5.3.9(1)-release (aarch64-apple-darwin23.4.0)
142
+ Copyright (C) 2024 Free Software Foundation, Inc.
143
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
144
+
145
+ This is free software; you are free to change and redistribute it.
146
+ There is NO WARRANTY, to the extent permitted by law.
147
+ ```
148
+
149
+ #### Troubleshooting
150
+
151
+ **Problem**: `bash: command not found` after installation
152
+
153
+ **Solution**: Homebrew may not be in your PATH. Add it by running:
154
+
155
+ ```bash
156
+ eval "$(/opt/homebrew/bin/brew shellenv)"
157
+ ```
158
+
159
+ For permanent fix, add the above line to your `~/.bash_profile`.
160
+
161
+ **Problem**: `chsh: /opt/homebrew/bin/bash: non-standard shell`
162
+
163
+ **Solution**: The new Bash was not added to `/etc/shells`. Add it manually:
164
+
165
+ ```bash
166
+ echo "$(brew --prefix)/bin/bash" | sudo tee -a /etc/shells >/dev/null
167
+ ```
168
+
169
+ **Problem**: Terminal still shows old Bash version after changing default shell
170
+
171
+ **Solution**: Close all terminal windows and open a new one. The shell change only takes effect in new sessions. Verify with:
172
+
173
+ ```bash
174
+ echo "$BASH_VERSION"
175
+ ```
176
+
177
+ **Problem**: Permission denied when modifying `/etc/shells`
178
+
179
+ **Solution**: Ensure you are using `sudo` with the `tee` command. If you still encounter issues, you may need to disable System Integrity Protection (SIP) temporarily, but this is rarely necessary and not recommended.
180
+
181
+ ---
182
+
183
+ ### Ubuntu/Debian (APT)
184
+
185
+ #### Prerequisites
186
+
187
+ - Ubuntu 18.04 or later, or Debian 10 or later (64-bit)
188
+ - sudo privileges
189
+ - Terminal access
190
+
191
+ Ubuntu and Debian include Bash by default. The version depends on your distribution release:
192
+ - Ubuntu 24.04 LTS: Bash 5.2.21
193
+ - Ubuntu 22.04 LTS: Bash 5.1.16
194
+ - Ubuntu 20.04 LTS: Bash 5.0.17
195
+ - Debian 12: Bash 5.2.15
196
+ - Debian 11: Bash 5.1.4
197
+
198
+ #### Installation Steps
199
+
200
+ Run the following commands to install or update Bash:
201
+
202
+ ```bash
203
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
204
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y bash
205
+ ```
206
+
207
+ The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully non-interactive installation suitable for automation scripts.
208
+
209
+ Bash is the default shell on Ubuntu/Debian, so no additional configuration is needed to set it as your default shell. If you need to explicitly set Bash as the default:
210
+
211
+ ```bash
212
+ sudo chsh -s /bin/bash "$USER"
213
+ ```
214
+
215
+ #### Verification
216
+
217
+ Confirm the installation succeeded:
218
+
219
+ ```bash
220
+ bash --version
221
+ ```
222
+
223
+ Expected output (version numbers may vary based on your distribution):
224
+
225
+ ```
226
+ GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
227
+ Copyright (C) 2024 Free Software Foundation, Inc.
228
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
229
+
230
+ This is free software; you are free to change and redistribute it.
231
+ There is NO WARRANTY, to the extent permitted by law.
232
+ ```
233
+
234
+ Check that Bash is your default shell:
235
+
236
+ ```bash
237
+ echo "$SHELL"
238
+ ```
239
+
240
+ Expected output:
241
+
242
+ ```
243
+ /bin/bash
244
+ ```
245
+
246
+ #### Troubleshooting
247
+
248
+ **Problem**: Package manager reports Bash is already installed
249
+
250
+ **Solution**: This is expected. To ensure you have the latest version available for your distribution:
251
+
252
+ ```bash
253
+ sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y bash
254
+ ```
255
+
256
+ **Problem**: `apt-get update` fails with repository errors
257
+
258
+ **Solution**: Your package sources may be outdated or unreachable. Try:
259
+
260
+ ```bash
261
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update --fix-missing -y
262
+ ```
263
+
264
+ **Problem**: Need a newer Bash version than available in official repositories
265
+
266
+ **Solution**: Ubuntu/Debian repositories contain stable, tested versions. For newer versions, consider compiling from source:
267
+
268
+ ```bash
269
+ # Install build dependencies
270
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential curl
271
+
272
+ # Download and extract Bash source
273
+ curl -fsSL https://ftp.gnu.org/gnu/bash/bash-5.3.tar.gz -o /tmp/bash-5.3.tar.gz
274
+ tar -xzf /tmp/bash-5.3.tar.gz -C /tmp
275
+
276
+ # Compile and install
277
+ cd /tmp/bash-5.3
278
+ ./configure --prefix=/usr/local
279
+ make -j$(nproc)
280
+ sudo make install
281
+
282
+ # Clean up
283
+ rm -rf /tmp/bash-5.3 /tmp/bash-5.3.tar.gz
284
+ ```
285
+
286
+ **Note**: Compiling from source installs to `/usr/local/bin/bash`. Add this to `/etc/shells` and use `chsh` to set it as your default if desired.
287
+
288
+ ---
289
+
290
+ ### Raspberry Pi OS (APT)
291
+
292
+ #### Prerequisites
293
+
294
+ - Raspberry Pi OS (32-bit or 64-bit)
295
+ - Raspberry Pi 3B+ or later recommended for adequate performance
296
+ - sudo privileges
297
+ - Terminal access (via local monitor/keyboard or SSH)
298
+
299
+ Raspberry Pi OS is based on Debian, so Bash installation follows the same process as Debian/Ubuntu. The package manager handles ARM architecture automatically.
300
+
301
+ Check your architecture:
302
+
303
+ ```bash
304
+ uname -m
305
+ ```
306
+
307
+ Expected output: `armv7l` (32-bit) or `aarch64` (64-bit).
308
+
309
+ #### Installation Steps
310
+
311
+ Run the following commands to install or update Bash:
312
+
313
+ ```bash
314
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
315
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y bash
316
+ ```
317
+
318
+ The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully non-interactive installation suitable for automation scripts and headless deployments.
319
+
320
+ Bash is the default shell on Raspberry Pi OS, so no additional configuration is needed.
321
+
322
+ #### Verification
323
+
324
+ Confirm the installation succeeded:
325
+
326
+ ```bash
327
+ bash --version
328
+ ```
329
+
330
+ Expected output (version numbers may vary based on your Raspberry Pi OS version):
331
+
332
+ ```
333
+ GNU bash, version 5.1.4(1)-release (arm-unknown-linux-gnueabihf)
334
+ Copyright (C) 2020 Free Software Foundation, Inc.
335
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
336
+
337
+ This is free software; you are free to change and redistribute it.
338
+ There is NO WARRANTY, to the extent permitted by law.
339
+ ```
340
+
341
+ On 64-bit Raspberry Pi OS, the architecture identifier will show `aarch64-unknown-linux-gnu` instead.
342
+
343
+ #### Troubleshooting
344
+
345
+ **Problem**: Slow package installation
346
+
347
+ **Solution**: Raspberry Pi may have limited bandwidth or SD card I/O. Allow extra time or use a wired ethernet connection for faster downloads. Using a high-quality SD card (Class 10 or better) also improves performance.
348
+
349
+ **Problem**: Package manager lock file errors
350
+
351
+ **Solution**: Another process may be using apt. Wait for it to complete or remove stale lock files:
352
+
353
+ ```bash
354
+ sudo rm -f /var/lib/apt/lists/lock /var/cache/apt/archives/lock /var/lib/dpkg/lock*
355
+ sudo dpkg --configure -a
356
+ ```
357
+
358
+ **Problem**: Out of memory during package installation
359
+
360
+ **Solution**: Increase swap space temporarily:
361
+
362
+ ```bash
363
+ sudo dphys-swapfile swapoff
364
+ sudo sed -i 's/CONF_SWAPSIZE=.*/CONF_SWAPSIZE=1024/' /etc/dphys-swapfile
365
+ sudo dphys-swapfile setup
366
+ sudo dphys-swapfile swapon
367
+ ```
368
+
369
+ ---
370
+
371
+ ### Amazon Linux/RHEL (DNF/YUM)
372
+
373
+ #### Prerequisites
374
+
375
+ - Amazon Linux 2023 (AL2023), Amazon Linux 2 (AL2), or RHEL 8/9
376
+ - sudo privileges
377
+ - Terminal access
378
+
379
+ **Bash Versions by Distribution**:
380
+ - Amazon Linux 2023: Bash 5.2.x (pre-installed)
381
+ - Amazon Linux 2: Bash 4.2.x (pre-installed)
382
+ - RHEL 9: Bash 5.1.x (pre-installed)
383
+ - RHEL 8: Bash 4.4.x (pre-installed)
384
+
385
+ #### Installation Steps
386
+
387
+ **For Amazon Linux 2023 and RHEL 8/9 (using DNF):**
388
+
389
+ ```bash
390
+ sudo dnf install -y bash
391
+ ```
392
+
393
+ **For Amazon Linux 2 (using YUM):**
394
+
395
+ ```bash
396
+ sudo yum install -y bash
397
+ ```
398
+
399
+ The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
400
+
401
+ To update Bash to the latest version available in your repository:
402
+
403
+ **Amazon Linux 2023 / RHEL 8/9:**
404
+
405
+ ```bash
406
+ sudo dnf upgrade -y bash
407
+ ```
408
+
409
+ **Amazon Linux 2:**
410
+
411
+ ```bash
412
+ sudo yum update -y bash
413
+ ```
414
+
415
+ **Note**: Amazon Linux 2023 uses versioned repositories that are locked to the AMI version by default. To get the latest packages, you may need to update the repository version:
416
+
417
+ ```bash
418
+ sudo dnf check-release-update
419
+ # If updates are available, follow the displayed command to update
420
+ ```
421
+
422
+ #### Verification
423
+
424
+ Confirm the installation succeeded:
425
+
426
+ ```bash
427
+ bash --version
428
+ ```
429
+
430
+ Expected output for Amazon Linux 2023 (version numbers may vary):
431
+
432
+ ```
433
+ GNU bash, version 5.2.15(1)-release (x86_64-amazon-linux-gnu)
434
+ Copyright (C) 2024 Free Software Foundation, Inc.
435
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
436
+
437
+ This is free software; you are free to change and redistribute it.
438
+ There is NO WARRANTY, to the extent permitted by law.
439
+ ```
440
+
441
+ Check that Bash is your default shell:
442
+
443
+ ```bash
444
+ echo "$SHELL"
445
+ ```
446
+
447
+ #### Troubleshooting
448
+
449
+ **Problem**: DNF/YUM reports Bash is already installed
450
+
451
+ **Solution**: This is expected on Amazon Linux and RHEL systems. To ensure you have the latest available version:
452
+
453
+ ```bash
454
+ # Amazon Linux 2023 / RHEL 8/9
455
+ sudo dnf upgrade -y bash
456
+
457
+ # Amazon Linux 2
458
+ sudo yum update -y bash
459
+ ```
460
+
461
+ **Problem**: `dnf: command not found` on Amazon Linux 2
462
+
463
+ **Solution**: Amazon Linux 2 uses `yum` by default. Use `yum` instead of `dnf`:
464
+
465
+ ```bash
466
+ sudo yum install -y bash
467
+ ```
468
+
469
+ **Problem**: Repository metadata errors
470
+
471
+ **Solution**: Clear the package manager cache and retry:
472
+
473
+ ```bash
474
+ # DNF (AL2023, RHEL 8/9)
475
+ sudo dnf clean all
476
+ sudo dnf makecache
477
+
478
+ # YUM (AL2)
479
+ sudo yum clean all
480
+ sudo yum makecache
481
+ ```
482
+
483
+ **Problem**: Need Bash 5.x on Amazon Linux 2 or RHEL 8
484
+
485
+ **Solution**: The official repositories contain older Bash versions. For Bash 5.x, compile from source:
486
+
487
+ ```bash
488
+ # Install build dependencies
489
+ sudo yum install -y gcc make curl
490
+
491
+ # Download and extract Bash source
492
+ curl -fsSL https://ftp.gnu.org/gnu/bash/bash-5.3.tar.gz -o /tmp/bash-5.3.tar.gz
493
+ tar -xzf /tmp/bash-5.3.tar.gz -C /tmp
494
+
495
+ # Compile and install
496
+ cd /tmp/bash-5.3
497
+ ./configure --prefix=/usr/local
498
+ make -j$(nproc)
499
+ sudo make install
500
+
501
+ # Clean up
502
+ rm -rf /tmp/bash-5.3 /tmp/bash-5.3.tar.gz
503
+ ```
504
+
505
+ ---
506
+
507
+ ### Windows (Git for Windows)
508
+
509
+ #### Prerequisites
510
+
511
+ - Windows 10 or Windows 11 (64-bit)
512
+ - Administrator privileges for installation
513
+ - Internet connectivity
514
+
515
+ **Note**: Windows does not have a native Bash shell. The recommended approach is to install Git for Windows, which includes Git Bash (a Bash emulation environment based on MSYS2). Git for Windows version 2.52.0 includes Bash 5.2.x, providing modern shell features.
516
+
517
+ #### Installation Steps
518
+
519
+ Install Git for Windows using Chocolatey. Run this command in an Administrator PowerShell or Command Prompt:
520
+
521
+ ```powershell
522
+ choco install git -y --params "/GitAndUnixToolsOnPath /NoAutoCrlf /WindowsTerminal"
523
+ ```
524
+
525
+ The `-y` flag automatically confirms all prompts. The parameters configure Git with commonly preferred settings:
526
+ - `/GitAndUnixToolsOnPath` - Adds Unix tools (including bash) to the Windows PATH
527
+ - `/NoAutoCrlf` - Disables automatic line ending conversion
528
+ - `/WindowsTerminal` - Adds Git Bash profile to Windows Terminal
529
+
530
+ If Chocolatey is not installed, install it first by running this command in an Administrator PowerShell:
531
+
532
+ ```powershell
533
+ 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'))
534
+ ```
535
+
536
+ After installation, close and reopen your terminal for PATH changes to take effect.
537
+
538
+ #### Verification
539
+
540
+ Open a new Command Prompt, PowerShell, or Git Bash window, then run:
541
+
542
+ ```bash
543
+ bash --version
544
+ ```
545
+
546
+ Expected output (version numbers may vary):
547
+
548
+ ```
549
+ GNU bash, version 5.2.32(1)-release (x86_64-pc-msys)
550
+ Copyright (C) 2024 Free Software Foundation, Inc.
551
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
552
+
553
+ This is free software; you are free to change and redistribute it.
554
+ There is NO WARRANTY, to the extent permitted by law.
555
+ ```
556
+
557
+ Verify Git Bash is accessible:
558
+
559
+ ```powershell
560
+ where bash
561
+ ```
562
+
563
+ Expected output:
564
+
565
+ ```
566
+ C:\Program Files\Git\bin\bash.exe
567
+ C:\Program Files\Git\usr\bin\bash.exe
568
+ ```
569
+
570
+ #### Troubleshooting
571
+
572
+ **Problem**: `bash: The term 'bash' is not recognized`
573
+
574
+ **Solution**: Open a new terminal window. The PATH is updated during installation but existing windows do not reflect this. Alternatively, refresh the environment in PowerShell:
575
+
576
+ ```powershell
577
+ refreshenv
578
+ ```
579
+
580
+ **Problem**: Installation fails with access denied
581
+
582
+ **Solution**: Ensure you are running PowerShell or Command Prompt as Administrator. Right-click and select "Run as administrator".
583
+
584
+ **Problem**: Chocolatey command not found
585
+
586
+ **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.
587
+
588
+ **Problem**: Git Bash shows wrong Bash version
589
+
590
+ **Solution**: Multiple Bash installations may exist. Check which bash is being used:
591
+
592
+ ```bash
593
+ which bash
594
+ type bash
595
+ ```
596
+
597
+ Remove conflicting installations or adjust your PATH to prioritize the Git for Windows bash.
598
+
599
+ ---
600
+
601
+ ### WSL (Ubuntu)
602
+
603
+ #### Prerequisites
604
+
605
+ - Windows 10 version 1903 or later, or Windows 11
606
+ - WSL 2 recommended for best performance
607
+ - Administrator privileges to install WSL
608
+ - sudo privileges within the WSL distribution
609
+
610
+ WSL (Windows Subsystem for Linux) provides a full Linux environment on Windows, including a native Bash shell. The Bash version depends on which Linux distribution you install.
611
+
612
+ #### Installation Steps
613
+
614
+ If WSL is not installed, install it first from an Administrator PowerShell:
615
+
616
+ ```powershell
617
+ wsl --install --no-launch
618
+ ```
619
+
620
+ The `--no-launch` flag prevents automatic launch after installation, which is useful for automation scripts.
621
+
622
+ After installation completes, restart your computer. Then launch Ubuntu to complete setup:
623
+
624
+ ```powershell
625
+ wsl --install -d Ubuntu --no-launch
626
+ ubuntu config --default-user root
627
+ ubuntu install --root
628
+ ```
629
+
630
+ **Note**: The first launch of Ubuntu will prompt for a username and password. For non-interactive installation in automation scenarios, use the commands above to configure a root user without prompts.
631
+
632
+ Once inside the WSL Ubuntu environment, update and install Bash:
633
+
634
+ ```bash
635
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
636
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y bash
637
+ ```
638
+
639
+ #### Verification
640
+
641
+ From within WSL, confirm the installation succeeded:
642
+
643
+ ```bash
644
+ bash --version
645
+ ```
646
+
647
+ Expected output (version numbers may vary):
648
+
649
+ ```
650
+ GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
651
+ Copyright (C) 2024 Free Software Foundation, Inc.
652
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
653
+
654
+ This is free software; you are free to change and redistribute it.
655
+ There is NO WARRANTY, to the extent permitted by law.
656
+ ```
657
+
658
+ Verify Bash is the default shell:
659
+
660
+ ```bash
661
+ echo "$SHELL"
662
+ ```
663
+
664
+ Expected output:
665
+
666
+ ```
667
+ /bin/bash
668
+ ```
669
+
670
+ #### Troubleshooting
671
+
672
+ **Problem**: `wsl: command not found`
673
+
674
+ **Solution**: WSL is not enabled. Enable it from an Administrator PowerShell:
675
+
676
+ ```powershell
677
+ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
678
+ dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
679
+ ```
680
+
681
+ Restart your computer after enabling these features.
682
+
683
+ **Problem**: WSL installation hangs or fails
684
+
685
+ **Solution**: Ensure virtualization is enabled in your BIOS/UEFI settings. Intel VT-x or AMD-V must be enabled for WSL 2 to function properly.
686
+
687
+ **Problem**: `apt-get update` fails inside WSL
688
+
689
+ **Solution**: DNS resolution may be failing. Create or modify `/etc/wsl.conf`:
690
+
691
+ ```bash
692
+ sudo tee /etc/wsl.conf > /dev/null << 'EOF'
693
+ [network]
694
+ generateResolvConf = false
695
+ EOF
696
+
697
+ sudo rm /etc/resolv.conf
698
+ sudo tee /etc/resolv.conf > /dev/null << 'EOF'
699
+ nameserver 8.8.8.8
700
+ nameserver 8.8.4.4
701
+ EOF
702
+ ```
703
+
704
+ Restart WSL from PowerShell:
705
+
706
+ ```powershell
707
+ wsl --shutdown
708
+ ```
709
+
710
+ **Problem**: Permission denied errors inside WSL
711
+
712
+ **Solution**: Your user may not have sudo privileges. Reset to root user temporarily:
713
+
714
+ ```bash
715
+ # From Windows PowerShell
716
+ ubuntu config --default-user root
717
+ ```
718
+
719
+ ---
720
+
721
+ ### Git Bash (Windows)
722
+
723
+ #### Prerequisites
724
+
725
+ - Windows 10 or Windows 11 (64-bit)
726
+ - Git for Windows installed (includes Git Bash)
727
+
728
+ **Note**: Git Bash is the Bash shell included with Git for Windows. If you followed the Windows installation steps above, Git Bash is already installed. This section covers using Git Bash and updating it.
729
+
730
+ Git Bash provides a BASH emulation that allows you to run Git from the command line along with common Unix utilities. It uses MSYS2 as its underlying runtime, which includes Bash 5.2.x in recent versions.
731
+
732
+ #### Installation Steps
733
+
734
+ If Git for Windows is not installed, follow the Windows (Git for Windows) section above.
735
+
736
+ To update Git Bash to the latest version, update Git for Windows using one of these methods:
737
+
738
+ **Method 1: Using Git's built-in update command (from Git Bash):**
739
+
740
+ ```bash
741
+ git update-git-for-windows
742
+ ```
743
+
744
+ **Note**: This command is interactive by default. For non-interactive updates, use Chocolatey (Method 2).
745
+
746
+ **Method 2: Using Chocolatey (from Administrator PowerShell):**
747
+
748
+ ```powershell
749
+ choco upgrade git -y
750
+ ```
751
+
752
+ The `-y` flag ensures non-interactive execution suitable for automation.
753
+
754
+ After updating, close and reopen Git Bash to use the new version.
755
+
756
+ #### Verification
757
+
758
+ Open Git Bash and confirm the Bash version:
759
+
760
+ ```bash
761
+ bash --version
762
+ ```
763
+
764
+ Expected output (version numbers may vary):
765
+
766
+ ```
767
+ GNU bash, version 5.2.32(1)-release (x86_64-pc-msys)
768
+ Copyright (C) 2024 Free Software Foundation, Inc.
769
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
770
+
771
+ This is free software; you are free to change and redistribute it.
772
+ There is NO WARRANTY, to the extent permitted by law.
773
+ ```
774
+
775
+ Check the Git version to ensure the update succeeded:
776
+
777
+ ```bash
778
+ git --version
779
+ ```
780
+
781
+ Expected output:
782
+
783
+ ```
784
+ git version 2.52.0.windows.1
785
+ ```
786
+
787
+ #### Troubleshooting
788
+
789
+ **Problem**: `git update-git-for-windows` is not a git command
790
+
791
+ **Solution**: Your Git version is too old (requires >= 2.14.2) or you are not using the official Git for Windows distribution. Update using Chocolatey instead:
792
+
793
+ ```powershell
794
+ choco upgrade git -y
795
+ ```
796
+
797
+ **Problem**: Git Bash shows old Bash version after update
798
+
799
+ **Solution**: Close all Git Bash windows and open a new one. The version change only takes effect in new sessions.
800
+
801
+ **Problem**: Unix commands not found in Git Bash
802
+
803
+ **Solution**: The Unix tools may not be on your PATH. Reinstall Git for Windows with the Unix tools option:
804
+
805
+ ```powershell
806
+ choco uninstall git -y
807
+ choco install git -y --params "/GitAndUnixToolsOnPath"
808
+ ```
809
+
810
+ **Problem**: Git Bash cannot find files in Windows paths
811
+
812
+ **Solution**: Convert Windows paths to Unix-style paths in Git Bash:
813
+
814
+ ```bash
815
+ # Windows path: C:\Users\username\Documents
816
+ # Git Bash path: /c/Users/username/Documents
817
+
818
+ cd /c/Users/username/Documents
819
+ ```
820
+
821
+ ---
822
+
823
+ ## Post-Installation Configuration
824
+
825
+ After installing Bash on any platform, consider these common configuration steps.
826
+
827
+ ### Create or Update Shell Configuration Files
828
+
829
+ Bash reads configuration files in a specific order. Create these files if they do not exist:
830
+
831
+ ```bash
832
+ # For login shells
833
+ touch ~/.bash_profile
834
+
835
+ # For interactive non-login shells
836
+ touch ~/.bashrc
837
+
838
+ # Ensure .bash_profile sources .bashrc for consistency
839
+ echo 'if [ -f ~/.bashrc ]; then source ~/.bashrc; fi' >> ~/.bash_profile
840
+ ```
841
+
842
+ ### Set Common Environment Variables
843
+
844
+ Add useful environment variables to your `~/.bashrc`:
845
+
846
+ ```bash
847
+ cat >> ~/.bashrc << 'EOF'
848
+
849
+ # History configuration
850
+ export HISTSIZE=10000
851
+ export HISTFILESIZE=20000
852
+ export HISTCONTROL=ignoreboth:erasedups
853
+ shopt -s histappend
854
+
855
+ # Better defaults
856
+ export EDITOR=vim
857
+ export VISUAL=vim
858
+ export PAGER=less
859
+
860
+ # Color support
861
+ export CLICOLOR=1
862
+ export LSCOLORS=GxFxCxDxBxegedabagaced
863
+ EOF
864
+ ```
865
+
866
+ ### Enable Bash Completion
867
+
868
+ Install bash-completion for enhanced tab completion:
869
+
870
+ **macOS:**
871
+ ```bash
872
+ brew install --quiet bash-completion@2
873
+ echo '[[ -r "$(brew --prefix)/etc/profile.d/bash_completion.sh" ]] && source "$(brew --prefix)/etc/profile.d/bash_completion.sh"' >> ~/.bash_profile
874
+ ```
875
+
876
+ **Ubuntu/Debian/Raspberry Pi OS:**
877
+ ```bash
878
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y bash-completion
879
+ ```
880
+
881
+ **Amazon Linux/RHEL:**
882
+ ```bash
883
+ sudo dnf install -y bash-completion # or: sudo yum install -y bash-completion
884
+ ```
885
+
886
+ ### Verify Configuration
887
+
888
+ After making changes, reload your configuration:
889
+
890
+ ```bash
891
+ source ~/.bashrc
892
+ ```
893
+
894
+ Check that your settings are applied:
895
+
896
+ ```bash
897
+ echo "HISTSIZE: $HISTSIZE"
898
+ echo "EDITOR: $EDITOR"
899
+ ```
900
+
901
+ ---
902
+
903
+ ## Common Issues
904
+
905
+ ### Issue: Scripts Written for Bash 4/5 Fail on macOS
906
+
907
+ **Symptoms**: Scripts using associative arrays, `${var,,}` (lowercase), or other Bash 4+ features fail with syntax errors.
908
+
909
+ **Solution**: Ensure you are using Homebrew Bash, not the system Bash:
910
+
911
+ ```bash
912
+ # Check which bash is being used
913
+ which bash
914
+ # Should show: /opt/homebrew/bin/bash (Apple Silicon) or /usr/local/bin/bash (Intel)
915
+
916
+ # Update your script shebang to use env
917
+ #!/usr/bin/env bash
918
+ ```
919
+
920
+ ### Issue: Shell Not Changing After chsh
921
+
922
+ **Symptoms**: After running `chsh`, new terminals still use the old shell.
923
+
924
+ **Solution**: The change only affects new login sessions. Log out and log back in, or restart your computer. On macOS, you may also need to update Terminal preferences to use the default login shell.
925
+
926
+ ### Issue: Bash Version Mismatch Between Shells
927
+
928
+ **Symptoms**: `bash --version` shows different versions depending on how you invoke it.
929
+
930
+ **Solution**: Check all bash binaries on your system:
931
+
932
+ ```bash
933
+ # List all bash locations
934
+ which -a bash
935
+
936
+ # Check each version
937
+ /bin/bash --version
938
+ /usr/local/bin/bash --version
939
+ /opt/homebrew/bin/bash --version # macOS Apple Silicon
940
+ ```
941
+
942
+ Remove or rename conflicting binaries, or ensure your PATH prioritizes the desired version.
943
+
944
+ ### Issue: Permission Denied When Running Scripts
945
+
946
+ **Symptoms**: `bash: ./script.sh: Permission denied`
947
+
948
+ **Solution**: Make the script executable:
949
+
950
+ ```bash
951
+ chmod +x ./script.sh
952
+ ```
953
+
954
+ Or run it explicitly with bash:
955
+
956
+ ```bash
957
+ bash ./script.sh
958
+ ```
959
+
960
+ ### Issue: Line Ending Problems (Windows/Unix)
961
+
962
+ **Symptoms**: Scripts fail with `$'\r': command not found` or similar errors.
963
+
964
+ **Solution**: Convert Windows line endings (CRLF) to Unix line endings (LF):
965
+
966
+ ```bash
967
+ # Using sed
968
+ sed -i 's/\r$//' script.sh
969
+
970
+ # Or using dos2unix (if installed)
971
+ dos2unix script.sh
972
+ ```
973
+
974
+ On Windows with Git, configure Git to not convert line endings:
975
+
976
+ ```bash
977
+ git config --global core.autocrlf false
978
+ ```
979
+
980
+ ---
981
+
982
+ ## References
983
+
984
+ - [GNU Bash Official Website](https://www.gnu.org/software/bash/)
985
+ - [GNU Bash Manual](https://www.gnu.org/software/bash/manual/bash.html)
986
+ - [Bash Homebrew Formula](https://formulae.brew.sh/formula/bash)
987
+ - [Ubuntu Bash Packages](https://packages.ubuntu.com/bash)
988
+ - [Git for Windows](https://gitforwindows.org/)
989
+ - [Git for Windows Silent Installation](https://github.com/git-for-windows/git/wiki/Silent-or-Unattended-Installation)
990
+ - [Microsoft WSL Documentation](https://learn.microsoft.com/en-us/windows/wsl/install)
991
+ - [Apple Terminal Documentation](https://support.apple.com/guide/terminal/change-the-default-shell-trml113/mac)
992
+ - [Bash Release Notes](https://tiswww.case.edu/php/chet/bash/NEWS)
993
+ - [Chocolatey Git Package](https://community.chocolatey.org/packages/git)