@fredlackey/devutils 0.0.18 → 0.1.0

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 (447) hide show
  1. package/README.md +214 -141
  2. package/package.json +8 -83
  3. package/src/api/loader.js +229 -0
  4. package/src/api/registry.json +62 -0
  5. package/src/cli.js +293 -60
  6. package/src/commands/ai/index.js +16 -0
  7. package/src/commands/ai/launch.js +112 -0
  8. package/src/commands/ai/list.js +54 -0
  9. package/src/commands/ai/resume.js +70 -0
  10. package/src/commands/ai/sessions.js +121 -0
  11. package/src/commands/ai/set.js +131 -0
  12. package/src/commands/ai/show.js +74 -0
  13. package/src/commands/ai/tools.js +46 -0
  14. package/src/commands/alias/add.js +93 -0
  15. package/src/commands/alias/helpers.js +107 -0
  16. package/src/commands/alias/index.js +14 -0
  17. package/src/commands/alias/list.js +55 -0
  18. package/src/commands/alias/remove.js +62 -0
  19. package/src/commands/alias/sync.js +109 -0
  20. package/src/commands/api/disable.js +73 -0
  21. package/src/commands/api/enable.js +148 -0
  22. package/src/commands/api/index.js +15 -0
  23. package/src/commands/api/list.js +66 -0
  24. package/src/commands/api/update.js +87 -0
  25. package/src/commands/auth/index.js +15 -0
  26. package/src/commands/auth/list.js +49 -0
  27. package/src/commands/auth/login.js +384 -0
  28. package/src/commands/auth/logout.js +111 -0
  29. package/src/commands/auth/refresh.js +184 -0
  30. package/src/commands/auth/services.js +169 -0
  31. package/src/commands/auth/status.js +104 -0
  32. package/src/commands/config/export.js +224 -0
  33. package/src/commands/config/get.js +52 -0
  34. package/src/commands/config/import.js +308 -0
  35. package/src/commands/config/index.js +17 -0
  36. package/src/commands/config/init.js +143 -0
  37. package/src/commands/config/reset.js +57 -0
  38. package/src/commands/config/set.js +93 -0
  39. package/src/commands/config/show.js +35 -0
  40. package/src/commands/help.js +338 -0
  41. package/src/commands/identity/add.js +133 -0
  42. package/src/commands/identity/index.js +17 -0
  43. package/src/commands/identity/link.js +76 -0
  44. package/src/commands/identity/list.js +48 -0
  45. package/src/commands/identity/remove.js +72 -0
  46. package/src/commands/identity/show.js +65 -0
  47. package/src/commands/identity/sync.js +172 -0
  48. package/src/commands/identity/unlink.js +57 -0
  49. package/src/commands/ignore/add.js +165 -0
  50. package/src/commands/ignore/index.js +14 -0
  51. package/src/commands/ignore/list.js +89 -0
  52. package/src/commands/ignore/markers.js +43 -0
  53. package/src/commands/ignore/remove.js +164 -0
  54. package/src/commands/ignore/show.js +169 -0
  55. package/src/commands/machine/detect.js +122 -0
  56. package/src/commands/machine/index.js +14 -0
  57. package/src/commands/machine/list.js +74 -0
  58. package/src/commands/machine/set.js +106 -0
  59. package/src/commands/machine/show.js +35 -0
  60. package/src/commands/schema.js +152 -0
  61. package/src/commands/search/collections.js +134 -0
  62. package/src/commands/search/get.js +71 -0
  63. package/src/commands/search/index-cmd.js +54 -0
  64. package/src/commands/search/index.js +21 -0
  65. package/src/commands/search/keyword.js +60 -0
  66. package/src/commands/search/qmd.js +70 -0
  67. package/src/commands/search/query.js +64 -0
  68. package/src/commands/search/semantic.js +62 -0
  69. package/src/commands/search/status.js +46 -0
  70. package/src/commands/status.js +224 -171
  71. package/src/commands/tools/check.js +79 -0
  72. package/src/commands/tools/index.js +14 -0
  73. package/src/commands/tools/install.js +110 -0
  74. package/src/commands/tools/list.js +91 -0
  75. package/src/commands/tools/search.js +60 -0
  76. package/src/commands/update.js +83 -112
  77. package/src/commands/util/add.js +151 -0
  78. package/src/commands/util/index.js +15 -0
  79. package/src/commands/util/list.js +97 -0
  80. package/src/commands/util/remove.js +76 -0
  81. package/src/commands/util/run.js +79 -0
  82. package/src/commands/util/show.js +67 -0
  83. package/src/commands/version.js +21 -88
  84. package/src/installers/_template.js +104 -0
  85. package/src/installers/git.js +150 -0
  86. package/src/installers/homebrew.js +190 -0
  87. package/src/installers/node.js +223 -0
  88. package/src/installers/registry.json +29 -0
  89. package/src/lib/config.js +125 -0
  90. package/src/lib/detect.js +74 -0
  91. package/src/lib/errors.js +114 -0
  92. package/src/lib/github.js +315 -0
  93. package/src/lib/installer.js +225 -0
  94. package/src/lib/output.js +239 -0
  95. package/src/lib/platform.js +112 -0
  96. package/src/lib/platforms/amazon-linux.js +41 -0
  97. package/src/lib/platforms/gitbash.js +46 -0
  98. package/src/lib/platforms/macos.js +45 -0
  99. package/src/lib/platforms/raspbian.js +41 -0
  100. package/src/lib/platforms/ubuntu.js +39 -0
  101. package/src/lib/platforms/windows.js +45 -0
  102. package/src/lib/prompt.js +161 -0
  103. package/src/lib/schema.js +211 -0
  104. package/src/lib/shell.js +75 -0
  105. package/src/patterns/gitignore/claude-code.txt +25 -0
  106. package/src/patterns/gitignore/docker.txt +15 -0
  107. package/src/patterns/gitignore/go.txt +24 -0
  108. package/src/patterns/gitignore/java.txt +38 -0
  109. package/src/patterns/gitignore/jetbrains.txt +26 -0
  110. package/src/patterns/gitignore/linux.txt +18 -0
  111. package/src/patterns/gitignore/macos.txt +27 -0
  112. package/src/patterns/gitignore/node.txt +51 -0
  113. package/src/patterns/gitignore/python.txt +55 -0
  114. package/src/patterns/gitignore/rust.txt +14 -0
  115. package/src/patterns/gitignore/terraform.txt +30 -0
  116. package/src/patterns/gitignore/vscode.txt +15 -0
  117. package/src/patterns/gitignore/windows.txt +25 -0
  118. package/src/utils/clone/index.js +165 -0
  119. package/src/utils/git-push/index.js +230 -0
  120. package/src/utils/git-status/index.js +116 -0
  121. package/src/utils/git-status/unix.sh +75 -0
  122. package/src/utils/registry.json +41 -0
  123. package/bin/dev.js +0 -16
  124. package/files/README.md +0 -0
  125. package/files/claude/.claude/commands/setup-context.md +0 -3
  126. package/files/monorepos/_archive/README.md +0 -36
  127. package/files/monorepos/_legacy/README.md +0 -36
  128. package/files/monorepos/ai-docs/README.md +0 -33
  129. package/files/monorepos/apps/README.md +0 -24
  130. package/files/monorepos/docs/README.md +0 -40
  131. package/files/monorepos/packages/README.md +0 -25
  132. package/files/monorepos/research/README.md +0 -29
  133. package/files/monorepos/scripts/README.md +0 -24
  134. package/src/commands/README.md +0 -41
  135. package/src/commands/configure.js +0 -199
  136. package/src/commands/identity.js +0 -1630
  137. package/src/commands/ignore.js +0 -247
  138. package/src/commands/install.js +0 -526
  139. package/src/commands/setup.js +0 -246
  140. package/src/completion.js +0 -284
  141. package/src/constants.js +0 -45
  142. package/src/ignore/claude-code.txt +0 -10
  143. package/src/ignore/docker.txt +0 -18
  144. package/src/ignore/linux.txt +0 -23
  145. package/src/ignore/macos.txt +0 -36
  146. package/src/ignore/node.txt +0 -55
  147. package/src/ignore/terraform.txt +0 -37
  148. package/src/ignore/vscode.txt +0 -18
  149. package/src/ignore/windows.txt +0 -35
  150. package/src/index.js +0 -0
  151. package/src/installs/README.md +0 -399
  152. package/src/installs/adobe-creative-cloud.js +0 -546
  153. package/src/installs/adobe-creative-cloud.md +0 -605
  154. package/src/installs/appcleaner.js +0 -321
  155. package/src/installs/appcleaner.md +0 -699
  156. package/src/installs/apt-transport-https.js +0 -390
  157. package/src/installs/apt-transport-https.md +0 -678
  158. package/src/installs/atomicparsley.js +0 -642
  159. package/src/installs/atomicparsley.md +0 -795
  160. package/src/installs/aws-cli.js +0 -797
  161. package/src/installs/aws-cli.md +0 -727
  162. package/src/installs/balena-etcher.js +0 -710
  163. package/src/installs/balena-etcher.md +0 -761
  164. package/src/installs/bambu-studio.js +0 -1143
  165. package/src/installs/bambu-studio.md +0 -780
  166. package/src/installs/bash-completion.js +0 -575
  167. package/src/installs/bash-completion.md +0 -833
  168. package/src/installs/bash.js +0 -417
  169. package/src/installs/bash.md +0 -993
  170. package/src/installs/beyond-compare.js +0 -603
  171. package/src/installs/beyond-compare.md +0 -813
  172. package/src/installs/brave-browser.js +0 -968
  173. package/src/installs/brave-browser.md +0 -650
  174. package/src/installs/build-essential.js +0 -529
  175. package/src/installs/build-essential.md +0 -977
  176. package/src/installs/ca-certificates.js +0 -618
  177. package/src/installs/ca-certificates.md +0 -937
  178. package/src/installs/caffeine.js +0 -508
  179. package/src/installs/caffeine.md +0 -839
  180. package/src/installs/camtasia.js +0 -596
  181. package/src/installs/camtasia.md +0 -762
  182. package/src/installs/chatgpt.js +0 -476
  183. package/src/installs/chatgpt.md +0 -814
  184. package/src/installs/chocolatey.js +0 -456
  185. package/src/installs/chocolatey.md +0 -661
  186. package/src/installs/chrome-canary.js +0 -419
  187. package/src/installs/chrome-canary.md +0 -641
  188. package/src/installs/chromium.js +0 -667
  189. package/src/installs/chromium.md +0 -838
  190. package/src/installs/claude-code.js +0 -576
  191. package/src/installs/claude-code.md +0 -1173
  192. package/src/installs/cloudflare-warp.js +0 -900
  193. package/src/installs/cloudflare-warp.md +0 -1047
  194. package/src/installs/comet-browser.js +0 -588
  195. package/src/installs/comet-browser.md +0 -731
  196. package/src/installs/curl.js +0 -379
  197. package/src/installs/curl.md +0 -714
  198. package/src/installs/cursor.js +0 -579
  199. package/src/installs/cursor.md +0 -970
  200. package/src/installs/dbeaver.js +0 -924
  201. package/src/installs/dbeaver.md +0 -939
  202. package/src/installs/dbschema.js +0 -692
  203. package/src/installs/dbschema.md +0 -925
  204. package/src/installs/dependencies.md +0 -453
  205. package/src/installs/development-tools.js +0 -600
  206. package/src/installs/development-tools.md +0 -977
  207. package/src/installs/docker.js +0 -1029
  208. package/src/installs/docker.md +0 -1109
  209. package/src/installs/drawio.js +0 -1019
  210. package/src/installs/drawio.md +0 -795
  211. package/src/installs/elmedia-player.js +0 -347
  212. package/src/installs/elmedia-player.md +0 -556
  213. package/src/installs/ffmpeg.js +0 -889
  214. package/src/installs/ffmpeg.md +0 -852
  215. package/src/installs/file.js +0 -464
  216. package/src/installs/file.md +0 -987
  217. package/src/installs/gemini-cli.js +0 -811
  218. package/src/installs/gemini-cli.md +0 -1153
  219. package/src/installs/git.js +0 -400
  220. package/src/installs/git.md +0 -907
  221. package/src/installs/gitego.js +0 -949
  222. package/src/installs/gitego.md +0 -1172
  223. package/src/installs/go.js +0 -931
  224. package/src/installs/go.md +0 -958
  225. package/src/installs/google-antigravity.js +0 -913
  226. package/src/installs/google-antigravity.md +0 -1075
  227. package/src/installs/google-chrome.js +0 -833
  228. package/src/installs/google-chrome.md +0 -862
  229. package/src/installs/gpg.js +0 -480
  230. package/src/installs/gpg.md +0 -1056
  231. package/src/installs/homebrew.js +0 -1028
  232. package/src/installs/homebrew.md +0 -988
  233. package/src/installs/imageoptim.js +0 -968
  234. package/src/installs/imageoptim.md +0 -1119
  235. package/src/installs/installers.json +0 -4032
  236. package/src/installs/installers.json.tmp +0 -3953
  237. package/src/installs/jq.js +0 -400
  238. package/src/installs/jq.md +0 -809
  239. package/src/installs/keyboard-maestro.js +0 -719
  240. package/src/installs/keyboard-maestro.md +0 -825
  241. package/src/installs/kiro.js +0 -864
  242. package/src/installs/kiro.md +0 -1015
  243. package/src/installs/latex.js +0 -789
  244. package/src/installs/latex.md +0 -1095
  245. package/src/installs/lftp.js +0 -356
  246. package/src/installs/lftp.md +0 -907
  247. package/src/installs/lsb-release.js +0 -346
  248. package/src/installs/lsb-release.md +0 -814
  249. package/src/installs/messenger.js +0 -847
  250. package/src/installs/messenger.md +0 -900
  251. package/src/installs/microsoft-office.js +0 -568
  252. package/src/installs/microsoft-office.md +0 -760
  253. package/src/installs/microsoft-teams.js +0 -801
  254. package/src/installs/microsoft-teams.md +0 -886
  255. package/src/installs/moom.js +0 -326
  256. package/src/installs/moom.md +0 -570
  257. package/src/installs/node.js +0 -904
  258. package/src/installs/node.md +0 -1153
  259. package/src/installs/nordpass.js +0 -716
  260. package/src/installs/nordpass.md +0 -921
  261. package/src/installs/nordvpn.js +0 -892
  262. package/src/installs/nordvpn.md +0 -1052
  263. package/src/installs/nvm.js +0 -995
  264. package/src/installs/nvm.md +0 -1057
  265. package/src/installs/ohmyzsh.js +0 -529
  266. package/src/installs/ohmyzsh.md +0 -1094
  267. package/src/installs/openssh.js +0 -804
  268. package/src/installs/openssh.md +0 -1056
  269. package/src/installs/pandoc.js +0 -662
  270. package/src/installs/pandoc.md +0 -1036
  271. package/src/installs/parallels-desktop.js +0 -431
  272. package/src/installs/parallels-desktop.md +0 -446
  273. package/src/installs/pinentry.js +0 -510
  274. package/src/installs/pinentry.md +0 -1142
  275. package/src/installs/pngyu.js +0 -869
  276. package/src/installs/pngyu.md +0 -896
  277. package/src/installs/postman.js +0 -799
  278. package/src/installs/postman.md +0 -940
  279. package/src/installs/procps.js +0 -425
  280. package/src/installs/procps.md +0 -851
  281. package/src/installs/safari-tech-preview.js +0 -374
  282. package/src/installs/safari-tech-preview.md +0 -533
  283. package/src/installs/sfnt2woff.js +0 -658
  284. package/src/installs/sfnt2woff.md +0 -795
  285. package/src/installs/shellcheck.js +0 -481
  286. package/src/installs/shellcheck.md +0 -1005
  287. package/src/installs/slack.js +0 -741
  288. package/src/installs/slack.md +0 -865
  289. package/src/installs/snagit.js +0 -585
  290. package/src/installs/snagit.md +0 -844
  291. package/src/installs/software-properties-common.js +0 -372
  292. package/src/installs/software-properties-common.md +0 -805
  293. package/src/installs/spotify.js +0 -877
  294. package/src/installs/spotify.md +0 -901
  295. package/src/installs/studio-3t.js +0 -823
  296. package/src/installs/studio-3t.md +0 -918
  297. package/src/installs/sublime-text.js +0 -804
  298. package/src/installs/sublime-text.md +0 -914
  299. package/src/installs/superwhisper.js +0 -706
  300. package/src/installs/superwhisper.md +0 -630
  301. package/src/installs/tailscale.js +0 -745
  302. package/src/installs/tailscale.md +0 -1100
  303. package/src/installs/tar.js +0 -389
  304. package/src/installs/tar.md +0 -946
  305. package/src/installs/termius.js +0 -798
  306. package/src/installs/termius.md +0 -844
  307. package/src/installs/terraform.js +0 -779
  308. package/src/installs/terraform.md +0 -899
  309. package/src/installs/tfenv.js +0 -778
  310. package/src/installs/tfenv.md +0 -1091
  311. package/src/installs/tidal.js +0 -771
  312. package/src/installs/tidal.md +0 -864
  313. package/src/installs/tmux.js +0 -346
  314. package/src/installs/tmux.md +0 -1030
  315. package/src/installs/tree.js +0 -411
  316. package/src/installs/tree.md +0 -833
  317. package/src/installs/unzip.js +0 -460
  318. package/src/installs/unzip.md +0 -879
  319. package/src/installs/vim.js +0 -421
  320. package/src/installs/vim.md +0 -1040
  321. package/src/installs/vlc.js +0 -821
  322. package/src/installs/vlc.md +0 -927
  323. package/src/installs/vscode.js +0 -843
  324. package/src/installs/vscode.md +0 -1002
  325. package/src/installs/wget.js +0 -420
  326. package/src/installs/wget.md +0 -791
  327. package/src/installs/whatsapp.js +0 -729
  328. package/src/installs/whatsapp.md +0 -854
  329. package/src/installs/winpty.js +0 -352
  330. package/src/installs/winpty.md +0 -620
  331. package/src/installs/woff2.js +0 -553
  332. package/src/installs/woff2.md +0 -977
  333. package/src/installs/wsl.js +0 -572
  334. package/src/installs/wsl.md +0 -699
  335. package/src/installs/xcode-clt.js +0 -520
  336. package/src/installs/xcode-clt.md +0 -351
  337. package/src/installs/xcode.js +0 -560
  338. package/src/installs/xcode.md +0 -573
  339. package/src/installs/yarn.js +0 -824
  340. package/src/installs/yarn.md +0 -1074
  341. package/src/installs/yq.js +0 -654
  342. package/src/installs/yq.md +0 -944
  343. package/src/installs/yt-dlp.js +0 -701
  344. package/src/installs/yt-dlp.md +0 -946
  345. package/src/installs/yum-utils.js +0 -297
  346. package/src/installs/yum-utils.md +0 -648
  347. package/src/installs/zoom.js +0 -759
  348. package/src/installs/zoom.md +0 -884
  349. package/src/installs/zsh.js +0 -455
  350. package/src/installs/zsh.md +0 -1008
  351. package/src/scripts/README.md +0 -617
  352. package/src/scripts/STATUS.md +0 -208
  353. package/src/scripts/afk.js +0 -411
  354. package/src/scripts/backup-all.js +0 -746
  355. package/src/scripts/backup-source.js +0 -727
  356. package/src/scripts/brewd.js +0 -389
  357. package/src/scripts/brewi.js +0 -520
  358. package/src/scripts/brewr.js +0 -527
  359. package/src/scripts/brews.js +0 -477
  360. package/src/scripts/brewu.js +0 -504
  361. package/src/scripts/c.js +0 -201
  362. package/src/scripts/ccurl.js +0 -341
  363. package/src/scripts/certbot-crontab-init.js +0 -504
  364. package/src/scripts/certbot-init.js +0 -657
  365. package/src/scripts/ch.js +0 -355
  366. package/src/scripts/claude-danger.js +0 -268
  367. package/src/scripts/clean-dev.js +0 -435
  368. package/src/scripts/clear-dns-cache.js +0 -541
  369. package/src/scripts/clone.js +0 -435
  370. package/src/scripts/code-all.js +0 -437
  371. package/src/scripts/count-files.js +0 -211
  372. package/src/scripts/count-folders.js +0 -211
  373. package/src/scripts/count.js +0 -264
  374. package/src/scripts/d.js +0 -219
  375. package/src/scripts/datauri.js +0 -389
  376. package/src/scripts/delete-files.js +0 -380
  377. package/src/scripts/docker-clean.js +0 -426
  378. package/src/scripts/dp.js +0 -442
  379. package/src/scripts/e.js +0 -390
  380. package/src/scripts/empty-trash.js +0 -513
  381. package/src/scripts/evm.js +0 -444
  382. package/src/scripts/fetch-github-repos.js +0 -456
  383. package/src/scripts/get-channel.js +0 -345
  384. package/src/scripts/get-course.js +0 -399
  385. package/src/scripts/get-dependencies.js +0 -306
  386. package/src/scripts/get-folder.js +0 -799
  387. package/src/scripts/get-tunes.js +0 -426
  388. package/src/scripts/get-video.js +0 -367
  389. package/src/scripts/git-backup.js +0 -577
  390. package/src/scripts/git-clone.js +0 -493
  391. package/src/scripts/git-pup.js +0 -319
  392. package/src/scripts/git-push.js +0 -396
  393. package/src/scripts/h.js +0 -622
  394. package/src/scripts/hide-desktop-icons.js +0 -499
  395. package/src/scripts/hide-hidden-files.js +0 -538
  396. package/src/scripts/install-dependencies-from.js +0 -456
  397. package/src/scripts/ips.js +0 -663
  398. package/src/scripts/iso.js +0 -370
  399. package/src/scripts/killni.js +0 -577
  400. package/src/scripts/ll.js +0 -467
  401. package/src/scripts/local-ip.js +0 -325
  402. package/src/scripts/m.js +0 -524
  403. package/src/scripts/map.js +0 -309
  404. package/src/scripts/mkd.js +0 -351
  405. package/src/scripts/ncu-update-all.js +0 -457
  406. package/src/scripts/nginx-init.js +0 -718
  407. package/src/scripts/npmi.js +0 -382
  408. package/src/scripts/o.js +0 -511
  409. package/src/scripts/org-by-date.js +0 -338
  410. package/src/scripts/p.js +0 -224
  411. package/src/scripts/packages.js +0 -330
  412. package/src/scripts/path.js +0 -225
  413. package/src/scripts/ports.js +0 -597
  414. package/src/scripts/q.js +0 -305
  415. package/src/scripts/refresh-files.js +0 -394
  416. package/src/scripts/remove-smaller-files.js +0 -516
  417. package/src/scripts/rename-files-with-date.js +0 -533
  418. package/src/scripts/resize-image.js +0 -539
  419. package/src/scripts/rm-safe.js +0 -669
  420. package/src/scripts/s.js +0 -540
  421. package/src/scripts/set-git-public.js +0 -365
  422. package/src/scripts/show-desktop-icons.js +0 -475
  423. package/src/scripts/show-hidden-files.js +0 -472
  424. package/src/scripts/tpa.js +0 -280
  425. package/src/scripts/tpo.js +0 -280
  426. package/src/scripts/u.js +0 -505
  427. package/src/scripts/vpush.js +0 -437
  428. package/src/scripts/y.js +0 -283
  429. package/src/utils/README.md +0 -95
  430. package/src/utils/common/apps.js +0 -143
  431. package/src/utils/common/display.js +0 -157
  432. package/src/utils/common/network.js +0 -185
  433. package/src/utils/common/os.js +0 -294
  434. package/src/utils/common/package-manager.js +0 -301
  435. package/src/utils/common/privileges.js +0 -138
  436. package/src/utils/common/shell.js +0 -261
  437. package/src/utils/macos/apps.js +0 -228
  438. package/src/utils/macos/brew.js +0 -315
  439. package/src/utils/ubuntu/apt.js +0 -307
  440. package/src/utils/ubuntu/desktop.js +0 -292
  441. package/src/utils/ubuntu/snap.js +0 -344
  442. package/src/utils/ubuntu/systemd.js +0 -286
  443. package/src/utils/windows/choco.js +0 -465
  444. package/src/utils/windows/env.js +0 -246
  445. package/src/utils/windows/registry.js +0 -269
  446. package/src/utils/windows/shell.js +0 -240
  447. package/src/utils/windows/winget.js +0 -489
@@ -1,993 +0,0 @@
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)