一,前言: 本文主要解說BASH的ShellScript,用戶LOGIN,端末軟件啟動等時的初期化文件和各個文件讀入的順序,並且將對初期化文件的內容進行詳細的解說。 二,概述: Linux的標准Shell是Bash,Bash的作用並不僅僅是對ShellScript的解釋和實行,並且在用戶登
一,前言: 本文主要解說BASH的ShellScript,用戶LOGIN,端末軟件啟動等時的初期化文件和各個文件讀入的順序,並且將對初期化文件的內容進行詳細的解說。
二,概述: Linux的標准Shell是Bash,Bash的作用並不僅僅是對ShellScript的解釋和實行,並且在用戶登錄控制,Term等端末軟件的命令行接受的命令進行處理等方面起著重要的作用。這樣的Shell由於是接受用戶的命令(鍵盤或其它)然後處理之後將結果顯示在屏幕上,所以叫對話式(Interactive)Shell。像這樣的對話式Shell可以對別名的定義,環境變數的設定等進行處理,還可以將端末的一些設定根據自己的愛好來改變,比如LS的顏色化表示,將自己的根目錄變成%,#,在什麼樣的端末上都可以用BackSpace鍵進行消除等。。。。。
像這樣的處理如果記述在初期化文件之中,在Shell啟動時就可以自動執行,這些初期化文件可以放在自己的根目錄下根據自己的喜好定制,當然,一些共通的設定可以放在全用戶共痛的初期化文件中。如果你想將你的Linux設定成適合自己使用的話(這可是Linux的長處),你一定要對Linux的各種初期化文件的處理順序,各個文件的不同作用等有一定的了解,本文將對此進行詳細的解說。
三,SHELL利用的各種初期化文件 Shell啟動時處理的初期化文件大致可分為兩類,用戶LOGIN時啟動的LoginShell和別的文件啟動時被
喚醒的二級SHELL。
初期化文件的內容全部是用ShellScript寫成的,在Shell啟動時自動(或者由其它文件喚醒)讀入,由Shell自身解釋並實行,所以初期化文件的第一行必須是[#!/bin/sh]或[#!/bin/bash],並且不用加實行屬性。本節將從以下幾個方面進行詳細解說:
.LoginShell利用時的初期化文件
.二級Shell利用的初期化文件
.兩種文件的合理的分別利用
3.1 LoginShell利用時的初期化文件
Login時,將用戶名和密碼輸入之後,在[/etc/passwd]之中記述的Shell會被啟動,
LINUX的標准SHELL是Bash,如果想確認自己使用的是何種SHELL的話,在命令行輸入
$ grep "^'whoami':" /etc/passwd
之後,結果是以分割開來的,第一段是用戶名,最後一段就是自己的LoginShell啦。
現在說明一下上面的命令,'whoami' 是對whoami實行之後的結果置換,也就是自己的用戶名,[^]是正規表現的用法,表示以什麼什麼開始的意思。比如自己的用戶名是[john],這條命令就是從文件[/etc/passwd]之中檢索以[john:]開始的行並表示。
在作為LoginShell的Bash啟動之後,兩個文件會被連續讀入,由LoginShell解釋實行。開始是全用戶共通的初期化文件[/etc/profile],接著是各用戶根目錄下的[.bash_profile]
Linux安裝之後,多數情況下會在各用戶根目錄下設置.bash_profile文件,自己的根目錄下有沒有此文件,用[ls -a] 確認,如果沒有的話,Bash將如何處理請參照本節的附錄。
/etc/profile,.bash_profile之中典型的處理內容是:PATH,USER等重要的環境變數的設定,程序異常終了時croe文件的大小的限制,新建文件的讀寫屬性等。具體的/etc/profile,.bash_profile文件的內容在後面將詳細介紹。
3.2 二級Shell利用的初期化文件
像X Window System的 kterm等軟件啟動時啟動的Shell,由於也可以接受用戶的命令,所以也叫對話式Shell當二級對話式Shell啟動時,會自動讀入用戶根目錄下的.bashrc,由調用的Shell解釋並執行。一般地說,全用戶共通的設定記述在/etc/bashrc中,但/etc/bashrc不能被自動讀入,必須由.bashrc指示才能被讀入。具體的可以用Bash的source命令或[.]實現,如在.bashrc中做如下記述:
1: if [ -f /etc/bashrc ]; then
2: . /etc/bashrc
3: fi
注:"-f" 是文件是否存在的判斷條件。
/etc/bashrc,.bashrc之中典型的處理內容是:一般環境變數的設定,組合變數[PSI]的設定,別名的定義, Shell涵數的定義,端末設定的變更等。
3.3 兩種初期化文件的合理的分別利用
在各用戶的根目錄下有兩個初期化文件:.bash_profile和.bashrc,如果相同的內容在兩個文件中都寫的話,就會造成不必要的重復和修改上的麻煩,如何才能合理的分別使用呢,基本原則是:
*在.bashrc中不會發生沖突的盡量在.bashrc中記述,從.bash_profile中喚起.bashrc。
*Login時執行一次就行的命令和二級對話式Shell啟動時反復執行會發生壞影響的命令在 .bash_profile中記述,
在.bash_profile中喚起.bashrc。的方法和從.bashrc讀入/etc/bashrc 的方法一樣,在.bash_profile中 做如下記述:
1: if [ -f ~/.bashrc ]; then
2: . ~/bashrc
3: fi
附錄: .bash_login 和.profile
如果用戶根目錄下沒有.bash_profile文件時,Bash會在根目錄下查找 .bash_login,如果 .bash_login 不存在的話,Bash會在根目錄下繼續查找.profile文件。
其實,這些文件都是從 C shell(.login), Bourne shell (.profile)來的,都是只有LoginShell利用的 初期化文件。不同的是,.profile是Bourne shell 和Bash 都可以利用的初期化文件。 從各初期化文件分開使用的方面來看,設置一個Bash 專用的.bash_profile比較合適。