###### 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 ``` ![](https://i.imgur.com/6pjHLS1.png) ``` $sudo env ``` ![](https://i.imgur.com/DU5hce6.png) --- ### 查看環境變數 #### login shell去執行 env ``` $ ssh -i keyName user@ip $ env | grep PATH ``` ![](https://i.imgur.com/GorQOQs.png) #### non-login shell 執行 env結果不同 ``` $ ssh -i keyName user@ip "env | grep PATH" ``` ![](https://i.imgur.com/Z4kGlud.png) --- #### 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> ![](https://i.imgur.com/yqFCy20.png) --- # env ### 位置 /usr/bin/env #### env 是 environment (環境)的簡寫 他的PATH會加載所有被export出的$PATH --- # env 內容 - HOME:「代表使用者的主文件夾」 - SHELL: 「目前這個環境使用的 SHELL 是哪支」 - PATH: 「就是可執行文件搜尋的路徑」 --- ![](https://blog.flowblok.id.au/static/images/shell-startup.png) --- ## 實測login shell和non login shell --- 1. "non-interactive" + "non-login shell" ![](https://i.imgur.com/6Ffngmo.png) ![](https://i.imgur.com/5Ag8zG2.png) --- 2. "non-interactive" + "沒有--login" ![](https://i.imgur.com/nOS3NtT.png) ![](https://i.imgur.com/5Ag8zG2.png) --- 3. "non-interactive" + "有--login" ![](https://i.imgur.com/9i7CMho.png) ![](https://i.imgur.com/TSHunZV.png) --- 4. "interactive" + "login shell" ![](https://i.imgur.com/9v0Fh1T.png) ![](https://i.imgur.com/XZQUilx.png)
{"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}]"}
    713 views