---
tags: linux-shell, bash
---
# LinuxShell: Chapt02 Bash shell setup
## 1 Linux install bash
### 1.1 確認目前shell
```shell=
echo $SHELL
```
```shell=
ls -sl /bin/sh
```
檢查版本
```shell=
echo $BASH_VERISON
```
**NOTICE**
***Login Shell*** 是使用者登入時,系統自動指派給使用者的shell環境
這是在建立帳號時,adduser命令就會讀取/etc/adduser.conf的設定
並根據其中的設定選項DSEHLL來指派(通常是設定DSHELL=/bin/bash)
然後把設定值寫在/etc/passwd帳號列的第七個欄位中
比如以下
```shell=
ols3:x:1000:1000:OLS3,,,:/home/ols3:/bin/bash
```
***System Shell*** 是主機在開機時或者伺服程式以其運作身份在執行時
所使用的shell環境
比如:
```shell=
root:x:0:0:root:/root:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
```
### 1.2 自行編譯的Bash
#### 1.2.1 下載 Source code
```shell=
ftp://ftp.gnu.org/gnu/bash/
ftp://ftp.gnu.edu/pub/bash/
```
建立bashwork目錄
```shell=
mkdir bashwork
cd basework
wget ftp://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
```
#### 1.2.2 下載修正檔
```shell=
wget ftp://ftp.gnu.org/gnu/bash/bash-4.4-patches/*
rm -rf *.sig
```
其中 *.sig為所以修正檔的簽章
#### 1.2.3 解壓縮 套用修正檔
```shell=
cd bashwork
tar xvzf bash-4.4.tar.gz
cd bash-4.4
```
```shell=
patch -p0 < ../bash44-001
patch -p0 < ../bash44-002
...
patch -p0 < ../bash44-012
```
#### 1.2.4 設定
```shell=
cd bashwork
cd bash-4.4
./configure
```
預設安裝目錄為/usr/local/
自行指定可以
```shell=
cd bashwork
cd bash-4.4
./configure --prefix=$HOME
```
#### 1.2.5 編譯
```shell=
cd bashwork;cd base-4.4;
make
```
#### 1.2.6 測試
```shell=
cd bashwork;cd base-4.4
make tests
```
確認版本
```shell=
./bash
echo $BASH_VERSION
```
#### 1.2.7 安裝
需要用root身份安裝
```shell=
su -
```
```shell=
cd bashwork;cd base-4.4;
make install
```
### 1.2.8 自動安裝
```shell=
https://shell.ols3.net/DL/shell-2017-v3/p-bash-auto.sh
```
用法:
```shell=
chmod +x p-bash-auto.sh
./p-bash-auto.sh
```
### 1.3 切換新版的Bash shell
方法1: 切換身份為root,加入 bash執行路徑到/etc/shells
```shell=
su -
vi /etc/shells
#新增 /usr/local/bin/bash
```
方法2: 用指令echo的方式
```shell=
su -
echo '/usr/local/bin/bash' >> /etc/shells
```
方法3: 把前面兩行使用 su -c 方式
```shell=
su -c "echo '/usr/local/bin/bash' >> /etc/shells"
```
方法4:
```shell=
chsh -s /usr/local/bin/bash $帳號
```
## 2 FreeBSD install bash
### 2.1 使用package 安裝bash
新版FreeBSD(10/11):
```shell=
pkg install bash
```
舊版FreeBSD
需要先設定環境變數PACKAGEROOT
```shell=
setenv PACKAGEROOT ftp://ftp.tw.freebsd.org
```
在執行:
```shell=
pkg_add -r bash
```
這樣就可以把bash 安裝在 /usr/local/bin/bash
### 2.2 用ports tree安裝 bash
修改/etc/make.conf
```shell=
MASTER_SITE_BACKUP?= \
ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\
ftp://ftp3.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}
```
編譯安裝 bash
```shell=
cd /usr/ports/shell/bash
make install clean
```
這樣就可以把bash 安裝在 /usr/local/bin/bash
### 2.3 切換使用 bash
執行chsh
```shell=
# Changing user database information for ols3.
Shell: /bin/ksh
Full Name: ols3
Office Location:
Office Phone:
Home Phone:
```
把/bin/ksh改為 /usr/local/bin/bash
或者執行以下指令:
```shell=
chsh -s /usr/local/bin/bash
```
重新登入主機後 bash當作login shell設定就會生效
## 3 OpenBSD install bash
### 3.1 確認預設shell
```shell=
$ echo $SHELL
/bin/ksh
```
### 3.2 使用package安裝bash
以下是以OpenBSD6.0 amd64版本為例
```shell=
export PKG_PATH=\
https://ftp.openbsd.org/pub/OpenBSD/6.0/packages/amd64/
```
```shell=
# pkg_add bash
```
結果會如下:
```shell=
quirks-2.241 signed on 2016-07-26T16:56:10Z
bash-4.3.46: ok
```
### 3.3 使用 ports tree安裝bash
```shell=
cd /usr/ports/shell/bash
make install clean
```
執行which
```shell=
# which bash
/usr/local/bin/bash
```
/etc/shells會自動加入bash
```shell=
/bin/sh
/bin/csh
/bin/ksh
/usr/local/bin/bash
```
### 3.4 切換使用bash
執行chsh
```shell=
# Changing user database information for ols3.
Shell: /bin/ksh
Full Name: ols3
Office Location:
Office Phone:
Home Phone:
```
把/bin/ksh改為 /usr/local/bin/bash
或者執行以下指令:
```shell=
chsh -s /usr/local/bin/bash
```
重新登入主機後 bash當作login shell設定就會生效
## 4 Windows install bash
### 4.1 Cygwin
[官網](https://www.cygwin.com/)
1 由Cygnus Solution開發,後來被RedHat公司收購,但仍然可以自由軟體的授權協議發行
2 Cygnwin創建一個Windows平台的Linux-Like環境,可以在這個環境中把Linux平台程式
migrate到Windows平台(但需要在Cygwin環境內重新編譯)
3 Cygwin是以DLL檔案方式,模擬Linux的API函式
### 4.2 MSYS22
[官網](https://www.mysys2.org/)
[SourceForge download link](https://sourceforge.net/projects/msys2/)
1 MSYS是著名的MinGW計畫(在Windows平台提供GCC編譯器的工具包)的一個子計畫
2 MSYS是Minimal SYStem的縮寫,在Windows平台提供GNU的基本工具以及shell環境
3 MSYS除了提供些bash,make, diff,patch, autoconf, automake, gawk, sed,perl開發工具還有vi,openssh,openssl等工具
4 MSYS主要目的是補足MinGW和Windows平台中的缺陷
## Contact info(聯絡資訊)
<a href="mailto:yuanyu90221@gmail.com?subject=contact">yuanyu90221@gmail.com</a>