1. 程式人生 > >登入/非登入、互動/非互動式shell

登入/非登入、互動/非互動式shell

登入與非登入shell的:

區分:是否需要輸入使用者名稱密碼。

轉換:

非登入可以轉換成登入 使用--login

考慮轉換情況,相對科學的區分:既不使用密碼,也不使用--login轉換的是非登入,其他都是登入。

登入與非登入執行shell的區別:

對於Bash來說,登入shell會首先讀取和執行/etc/profile全域性配置檔案中的命令,然後依次查詢~/.bash_profile、~/.bash_login 和 ~/.profile這三個配置檔案,讀取和執行這三個中的第一個存在且可讀的檔案中命令。除非被“–noprofile”選項禁止了。

在非登入shell裡,只讀取 ~/.bashrc (和 /etc/bash.bashrc、/etc/bashrc )檔案,不同的發行版裡面可能有所不同。

互動式與非互動式shell:

區分:是否與使用者進行互動(在終端上執行,shell等待你的輸入,並且立即執行你提交的命令。

互動式與非互動式shell執行時的區別:

互動式shell下開啟程序時,會啟用工作控制job control(會影響到其子程序程序組的編號,作業控制模式下被shell開啟的程序,程序組號為程序號),否則不會啟用(其開啟的程序組號繼承父程序的程序組,既執行指令碼的非互動式shell程序)。這是linux在作業控制中的設計,我準備另起文章探討。在shell指令碼中,使用set -m可以改變指令碼的執行模式開啟工作控制。

是否登入與是否互動是兩個維度的概念,兩兩組合的四種情況均會出現:

1、登入互動式  最常見的登入系統後進行操作使用的shell。

2、非登入非互動式  常見的shell指令碼的執行方式。

3、非登入互動式   在shell中使用bash調出shell、在系統中開啟命令列工具等。

4、登入非互動式   強制使用登入方式開啟的shell指令碼。可以改變指令碼訪問的全域性檔案,在不少情況下也需要使用(遠端使用非登入shell呼叫指令碼但需要登入的全域性環境時適用)。