###### tags: `slide`
# login shell
# vs.
# no-login shell
---
## 什麼是login shell?
取得 bash 時需要完整的登入流程的,就稱為 login shell
---
## 什麼是non-login shell?
取得 bash 接口的方法不需要重複登入的舉動
---
## interactive 交互式Shell
提供了命令提示符可以輸入命令
---
## non-interactive 非交互式Shell
可以透過bash -c 「CMD指令」
---
### login角色不同會讀不同的設定檔案
```
$env
```

```
$sudo env
```

---
### 查看環境變數
#### login shell去執行 env
```
$ ssh -i keyName user@ip
$ env | grep PATH
```

#### non-login shell 執行 env結果不同
```
$ ssh -i keyName user@ip "env | grep PATH"
```

---
#### login shell去執行npm指令時
```
$ ssh -i keyName user@ip
$ npm install
// npm install successfully
```
#### non-login shell 執行npm命令結果不同
```
$ ssh -i keyName user@ip "npm install"
// npm command not found
```
---
## 解決辦法
### 讓non-login shell 變成是login shell
```
$ ssh -i keyName user@ip "npm install"
```
```
$ ssh -i keyName user@ip "bash -l -c 'npm install'"
```
- -l 登入,等同於--login
- -c 指令,後面接string
---
## 認識「bash 的環境配置文件」
---
## ~/.bashrc(no login shell讀取)
- 當登入時以及每次開啟新的shell時才會被讀取
- 設定整體的環境設置
- 去加載 /etc/bashrc(當系統擁有多個 shell 時,最好把 bash 的配置個別放在這個檔案)
<div style="text-align: left;"><font size = "4">
<font color = "yellow">Ubuntu不會有/etc/bashrc只會有/etc/bash.bashrc</font></font></div>
---
## /etc/profile(login shell讀取)
<div style="text-align: left;"><font color = "yellow"><font size = "5">與–login 選項交互調用時,或者作為sh調用時,Bash 會讀取 /etc/profile,通常用來讀取環境參數,例如 PATH, USER, MAIL, HOSTNAME and HISTSIZE</font></font></div>
<div style="text-align: left;">
接著它會按順序讀取1個:
~/.bash_profile, ~/.bash_login, ~/.profile</div>

---
# env
### 位置 /usr/bin/env
#### env 是 environment (環境)的簡寫
他的PATH會加載所有被export出的$PATH
---
# env 內容
- HOME:「代表使用者的主文件夾」
- SHELL: 「目前這個環境使用的 SHELL 是哪支」
- PATH: 「就是可執行文件搜尋的路徑」
---

---
## 實測login shell和non login shell
---
1. "non-interactive" + "non-login shell"


---
2. "non-interactive" + "沒有--login"


---
3. "non-interactive" + "有--login"


---
4. "interactive" + "login shell"


{"metaMigratedAt":"2023-06-15T10:26:52.240Z","metaMigratedFrom":"Content","title":"login shell","breaks":true,"contributors":"[{\"id\":\"30e59c9a-3d1d-4bc1-8daa-c97ff56595a3\",\"add\":3412,\"del\":943}]"}