如何解析 Bash 程序的配置文件
將程序配置與代碼分離是很重要的。它使非程序員能夠改變配置而不需要修改程序的代碼。如果是編譯好的二進位可執行文件,這對非程序員來說是不可能的,因為它不僅需要訪問源文件(我們在開源程序中會這樣),而且還需要程序員的技能組合。很少有人有這種能力,而且大多數人都不想學習它。
對於像 Bash 這樣的 shell 語言,由於 shell 腳本沒有被編譯成二進位格式,所以從定義上講,源碼是可以訪問的。儘管有這種開放性,但對於非程序員來說,在 shell 腳本中鑽研和修改它們並不是一個特別好的主意。即使是經驗豐富的開發人員和系統管理員,也會意外地做出一些導致錯誤或更糟的改變。
因此,將配置項放在容易維護的文本文件中,提供了分離,並允許非程序員編輯配置,而不會有對代碼進行意外修改的危險。許多開發者對用編譯語言編寫的程序都是這樣做的,因為他們並不期望用戶是開發者。由於許多相同的原因,對解釋型 shell 語言這樣做也是有意義的。
通常的方式
和其他許多語言一樣, 你可以為 Bash 程序編寫代碼,來讀取並解析 ASCII 文本的配置文件、讀取變數名稱並在程序代碼執行時設置值。例如,一個配置文件可能看起來像這樣:
var1=LinuxGeek46
var2=Opensource.com
程序將讀取文件,解析每一行,並將值設置到每個變數中。
源引
Bash 使用一種更簡單的方法來解析和設置變數, 叫做 源引 。從一個可執行的 shell 程序中獲取一個外部文件是一種簡單的方法,可以將該文件的內容完整地引入 shell 程序中。在某種意義上,這很像編譯語言的 include
語句,在運行時包括庫文件。這樣的文件可以包括任何類型的 Bash 代碼,包括變數賦值。
(LCTT 譯註:對於使用 source
或 .
命令引入另外一個文件的行為,我們首倡翻譯為「源引」。)
像往常一樣,演示比解釋更容易。
首先,創建一個 ~/bin
目錄(如果它還不存在的話),並將其作為當前工作目錄(PWD)。Linux 文件系統分層標準 將 ~/bin
定義為用戶存儲可執行文件的適當位置。
在這個目錄下創建一個新文件。將其命名為 main
,並使其可執行:
[dboth@david bin]$ touch main
[dboth@david bin]$ chmod +x main
[dboth@david bin]$
在這個可執行文件中添加以下內容:
#!/bin/bash
Name="LinuxGeek"
echo $Name
並執行這個 Bash 程序:
[dboth@david bin]$ ./main
LinuxGeek
[dboth@david bin]$
創建一個新的文件並命名為 ~/bin/data
。這個文件不需要是可執行的。在其中添加以下信息:
# Sourced code and variables
echo "This is the sourced code from the data file."
FirstName="David"
LastName="Both"
在 main
程序中增加三行,看起來像這樣:
#!/bin/bash
Name="LinuxGeek"
echo $Name
source ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
重新運行該程序:
[dboth@david bin]$ ./main
LinuxGeek
This is the sourced code from the data file.
First name: David
LastName: Both
[dboth@david bin]$
關於源引還有一件非常酷的事情要知道。你可以使用一個單點(.
)作為 source
命令的快捷方式。改變 main
文件,用 .
代替 source
。
#!/bin/bash
Name="LinuxGeek"
echo $Name
. ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
並再次運行該程序。其結果應該與之前的運行完全相同。
運行 Bash
每一台使用 Bash 的 Linux 主機(幾乎所有主機都是,因為 Bash 是所有發行版的默認 shell),都包括一些優秀的、內置的源引示例。
每當 Bash shell 運行時,它的環境必須被配置成可以使用的樣子。有五個主要文件和一個目錄用於配置 Bash 環境。它們和它們的主要功能如下:
/etc/profile
: 系統級的環境和啟動程序/etc/bashrc
: 系統級的函數和別名/etc/profile.d/
: 包含系統級的腳本的目錄,用於配置各種命令行工具,如vim
和mc
以及系統管理員創建的任何自定義配置腳本~/.bash_profile
: 用戶特定的環境和啟動程序~/.bashrc
: 用戶特定的別名和函數~/.bash_logout
: 用戶特定的命令,在用戶註銷時執行
試著通過這些文件追蹤執行順序,確定它在非登錄 Bash 初始化和登錄 Bash 初始化中使用的順序。我在我的 Linux 培訓系列《使用和管理 Linux:從零到系統管理員》的第一卷第 17 章中這樣做過。
給你一個提示。這一切都從 ~/.bashrc
腳本開始。
總結
這篇文章探討了在 Bash 程序中引用代碼和變數的方法。這種從配置文件中解析變數的方法是快速、簡單和靈活的。它提供了一種將 Bash 代碼與變數賦值分開的方法,以使非程序員能夠設置這些變數的值。
via: https://opensource.com/article/21/6/bash-config
作者:David Both 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive