การรักษาคอนฟิกูเรชันของโปรแกรมแยกจากโค้ดเป็นสิ่งสำคัญ ช่วยให้ผู้ที่ไม่ใช่โปรแกรมเมอร์สามารถปรับเปลี่ยนการกำหนดค่าได้โดยไม่ต้องแก้ไขโค้ดของโปรแกรม ด้วยไฟล์สั่งการไบนารีที่คอมไพล์แล้ว นั่นคงเป็นไปไม่ได้สำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ เพราะไม่เพียงต้องการการเข้าถึงไฟล์ต้นฉบับ (ซึ่งเรามีในโปรแกรมโอเพ่นซอร์ส) แต่ยังรวมถึงชุดทักษะของโปรแกรมเมอร์ด้วย น้อยคนนักที่จะมีสิ่งนั้น และคนส่วนใหญ่ไม่ต้องการเรียนรู้
ด้วยภาษาของเชลล์ เช่น Bash การเข้าถึงซอร์สโค้ดสามารถใช้ได้ตามคำจำกัดความ เนื่องจากเชลล์สคริปต์ไม่ได้ถูกคอมไพล์เป็นรูปแบบไบนารี แม้จะมีความเปิดกว้างนั้น แต่ก็ไม่ใช่ความคิดที่ดีโดยเฉพาะสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ที่จะรูทในเชลล์สคริปต์และปรับเปลี่ยน แม้แต่นักพัฒนาและผู้ดูแลระบบที่มีความรู้ก็สามารถทำการเปลี่ยนแปลงโดยไม่ได้ตั้งใจซึ่งทำให้เกิดข้อผิดพลาดหรือแย่กว่านั้นได้
ดังนั้นการวางรายการคอนฟิกูเรชันลงในไฟล์ข้อความที่ดูแลรักษาง่ายจึงทำให้มีการแยกส่วนและช่วยให้ผู้ที่ไม่ใช่โปรแกรมเมอร์สามารถแก้ไของค์ประกอบการกำหนดค่าได้โดยไม่เกิดอันตรายจากการเปลี่ยนแปลงโค้ดโดยไม่ได้ตั้งใจ นักพัฒนาหลายคนทำเช่นนี้สำหรับโปรแกรมที่เขียนด้วยภาษาที่คอมไพล์เพราะพวกเขาไม่ได้คาดหวังให้ผู้ใช้เป็นนักพัฒนา ด้วยเหตุผลเดียวกันหลายประการ การทำเช่นนี้ด้วยภาษาเชลล์ที่ตีความก็สมเหตุสมผลด้วย
ทางปกติ
เช่นเดียวกับภาษาอื่นๆ คุณสามารถเขียนโค้ดสำหรับโปรแกรม Bash ที่อ่านและแยกวิเคราะห์ไฟล์การกำหนดค่าข้อความ ASCII อ่านชื่อตัวแปร และตั้งค่าเมื่อโค้ดโปรแกรมทำงาน ตัวอย่างเช่น ไฟล์การกำหนดค่าอาจมีลักษณะดังนี้:
var1=LinuxGeek46
var2=Opensource.com
โปรแกรมจะอ่านไฟล์นั้น แยกวิเคราะห์แต่ละบรรทัด และตั้งค่าเป็นตัวแปรแต่ละตัว
การจัดหา
Bash ใช้วิธีแยกวิเคราะห์และตั้งค่าตัวแปรที่เรียกว่า การจัดหา . การจัดหาไฟล์ภายนอกจากโปรแกรมเชลล์ที่เรียกใช้งานได้เป็นวิธีง่ายๆ ในการรวมเนื้อหาของไฟล์นั้นลงในโปรแกรมเชลล์อย่างครบถ้วน ในแง่หนึ่ง มันเหมือนกับภาษาที่คอมไพล์ include
คำสั่งที่รวมไฟล์ไลบรารีที่รันไทม์ ไฟล์ดังกล่าวสามารถรวมรหัส Bash ได้ทุกประเภท รวมถึงการมอบหมายตัวแปร
ตามปกติแล้ว สาธิตง่ายกว่าอธิบาย
ขั้นแรก สร้าง ~/bin
ไดเร็กทอรี (หากยังไม่มีอยู่) และทำให้เป็นไดเร็กทอรีการทำงานปัจจุบัน (PWD) Linux Filesystem Hierarchical Standard กำหนด ~/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"
และรันโปรแกรมอีกครั้ง ผลลัพธ์ควรเหมือนกับการรันครั้งก่อนทุกประการ
การเริ่มต้นทุบตี
โฮสต์ Linux ทุกเครื่องที่ใช้ Bash ซึ่งเกือบจะทั้งหมดแล้ว เนื่องจาก Bash เป็นเชลล์เริ่มต้นสำหรับการแจกแจงทั้งหมด รวมถึงตัวอย่างการจัดหาในตัวที่ยอดเยี่ยมและในตัว
เมื่อใดก็ตามที่เชลล์ Bash เริ่มทำงาน ต้องกำหนดค่าสภาพแวดล้อมเพื่อให้สามารถใช้งานได้ มีไฟล์หลักห้าไฟล์และหนึ่งไดเร็กทอรีที่ใช้ในการกำหนดค่าสภาพแวดล้อม Bash สิ่งเหล่านี้แสดงอยู่ที่นี่พร้อมกับหน้าที่หลัก:
/etc/profile
:สภาพแวดล้อมทั้งระบบและโปรแกรมเริ่มต้น/etc/bashrc
:ฟังก์ชันและนามแฝงทั้งระบบ/etc/profile.d/
:ไดเร็กทอรีที่มีสคริปต์ทั้งระบบสำหรับกำหนดค่าเครื่องมือบรรทัดคำสั่งต่างๆ เช่นvim
และmc
และสคริปต์การกำหนดค่าแบบกำหนดเองใดๆ ที่ผู้ดูแลระบบสร้างขึ้น~/.bash_profile
:สภาพแวดล้อมเฉพาะผู้ใช้และโปรแกรมเริ่มต้น~/.bashrc
:นามแฝงและฟังก์ชันเฉพาะผู้ใช้~/.bash_logout
:คำสั่งเฉพาะผู้ใช้ที่จะดำเนินการเมื่อผู้ใช้ออกจากระบบ
พยายามติดตามลำดับการดำเนินการผ่านไฟล์เหล่านี้ และกำหนดลำดับที่จะใช้สำหรับการเริ่มต้น Bash ที่ไม่ใช่การเข้าสู่ระบบ เทียบกับการเริ่มต้น Bash ในการเข้าสู่ระบบ ฉันทำสิ่งนี้ในบทที่ 17 ของเล่ม 1 ในชุดฝึกอบรม Linux การใช้และดูแลระบบ Linux:Zero to sysadmin .
ฉันจะให้คำใบ้หนึ่งแก่คุณ ทุกอย่างเริ่มต้นด้วย ~/.bashrc
สคริปต์
บทสรุป
บทความนี้สำรวจการจัดหาสำหรับการดึงโค้ดและการกำหนดตัวแปรลงในโปรแกรม Bash วิธีการแยกวิเคราะห์ตัวแปรจากไฟล์คอนฟิกูเรชันนี้รวดเร็ว ง่ายดาย และยืดหยุ่น มีวิธีการแยกรหัส Bash ออกจากการกำหนดตัวแปรเพื่อให้ผู้ที่ไม่ใช่โปรแกรมเมอร์ตั้งค่าของตัวแปรเหล่านั้นได้