天天看點

登陸shell,非登陸shell 以及互動shell和非互動shell

    linux下shell運作模式分為登陸shell,非登陸shell 以及互動shell和非互動shell,這幾種分類方法是有交叉的,也就是說一個login shell可能是一個interactive shell,也可能是個non-interactive shell。

    1.我們平時運作的shell腳本,一般是不和使用者互動的,這就是一種非互動,非登陸shell.

    2.在系統已經登陸後,你打開一個終端,或者執行bash 指令建立一個終端視窗,這就是一種互動式的非登陸shell.

    3.login shell是通過登陸得來的,主要有以下幾種方式:

  1. 登入系統時獲得的頂層shell,無論是通過本地終端登入,還是通過網絡ssh登入。這種情況下獲得的login shell是一個互動式shell。
  2. 在終端下使用--login選項調用bash 指令,可以獲得一個互動式login shell。
  3. 在腳本中使用--login選項調用bash(比如在shell腳本第一行做如下指定:#!/bin/bash --login),此時得到一個非互動式的login shell。
  4. 使用"su -"切換到指定使用者時,獲得此使用者的login shell。如果不使用"-",則獲得non-login shell。

login shell與non-login shell的主要差別在于它們啟動時會讀取不同的配置檔案,進而導緻環境不一樣。login shell(包括互動式登入shell和使用“--login”選項的非互動shell)啟動時首先讀取/etc/profile全局配置,然後依次查找~/.bash_profile、~/.bash_login、~/.profile三個配置檔案,并且讀取第一個找到的并且可讀的檔案。login shell退出時讀取并執行~/.bash_logout中的指令。

在非登入shell裡,隻讀取 ~/.bashrc (一般會在其中再去讀取/etc/bash.bashrc、/etc/bashrc )檔案,不同的發行版裡面可能有所不同。

非互動式shell,對于zsh,可以将配置邏輯寫入~/.zshenv;對于bash,可以寫入一個檔案并将此檔案名設定為BASH_ENV的值。