@fredlackey/devutils 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
|
@@ -0,0 +1,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)
|