เมื่อคุณเข้าสู่ระบบเปลือก Linux คุณจะสืบทอดสภาพแวดล้อมการทำงานเฉพาะ สิ่งแวดล้อม ในบริบทของเชลล์ หมายความว่ามีตัวแปรบางตัวที่ตั้งค่าไว้แล้วสำหรับคุณ ซึ่งช่วยให้มั่นใจว่าคำสั่งของคุณทำงานตามที่ตั้งใจไว้ ตัวอย่างเช่น ตัวแปรสภาพแวดล้อม PATH กำหนดตำแหน่งที่เชลล์ค้นหาคำสั่ง หากไม่มีสิ่งนี้ เกือบทุกอย่างที่คุณพยายามทำใน Bash จะล้มเหลวด้วย ไม่พบคำสั่ง ข้อผิดพลาด. สภาพแวดล้อมของคุณ แม้ว่าคุณส่วนใหญ่จะมองไม่เห็นในขณะที่คุณทำงานประจำวัน แต่มีความสำคัญอย่างยิ่ง
มีหลายวิธีที่จะส่งผลต่อสภาพแวดล้อมของเชลล์ของคุณ คุณสามารถแก้ไขไฟล์การกำหนดค่าได้ เช่น ~/.bashrc
และ ~/.profile
คุณสามารถเรียกใช้บริการต่างๆ เมื่อเริ่มต้น และคุณสามารถสร้างคำสั่งที่กำหนดเองหรือสคริปต์ฟังก์ชัน Bash ของคุณเองได้
เพิ่มในสภาพแวดล้อมของคุณด้วยแหล่งที่มา
Bash (พร้อมกับเชลล์อื่นๆ) มีคำสั่งในตัวที่เรียกว่า source
. และอาจทำให้เกิดความสับสนได้:source
ทำหน้าที่เดียวกับคำสั่ง .
(ใช่ นั่นเป็นเพียงจุดเดียว) และมันคือ ไม่ใช่ source
sameเดียวกัน เป็น Tcl
คำสั่ง (ซึ่งอาจปรากฏขึ้นบนหน้าจอของคุณหากคุณพิมพ์ man source
). ในตัว source
คำสั่งไม่อยู่ใน PATH
. ของคุณ ที่จริงแล้ว เป็นคำสั่งที่รวมอยู่ใน Bash และหากต้องการข้อมูลเพิ่มเติม คุณสามารถพิมพ์ help source
.
.
คำสั่งเป็นไปตาม POSIX source
คำสั่งไม่ได้ถูกกำหนดโดย POSIX แต่สามารถใช้แทนกันได้กับ .
คำสั่ง
ตาม Bash help
, source
คำสั่งรันไฟล์ในเชลล์ปัจจุบันของคุณ ประโยค "ในเชลล์ปัจจุบันของคุณ" มีความสำคัญ เพราะมันหมายความว่ามันไม่เปิด sub-shell; ดังนั้น สิ่งที่คุณดำเนินการด้วย source
เกิดขึ้นภายในและส่งผลต่อปัจจุบัน .ของคุณ สิ่งแวดล้อม
ก่อนจะสำรวจว่า source
สามารถส่งผลกระทบต่อสภาพแวดล้อมของคุณ ลองใช้ source
ในไฟล์ทดสอบเพื่อให้แน่ใจว่ารันโค้ดตามที่คาดไว้ ขั้นแรก สร้างสคริปต์ทุบตีอย่างง่ายแล้วบันทึกเป็นไฟล์ชื่อ hello.sh
:
#!/usr/bin/env bash
echo "สวัสดีชาวโลก"
การใช้ source
คุณสามารถเรียกใช้สคริปต์นี้ได้โดยไม่ต้องตั้งค่าบิตปฏิบัติการ:
$ แหล่งที่มา hello.sh
สวัสดีชาวโลก
คุณยังสามารถใช้.
.ในตัว คำสั่งสำหรับผลลัพธ์เดียวกัน:
$ . hello.sh
สวัสดีชาวโลก
source
และ .
คำสั่งดำเนินการเนื้อหาของไฟล์ทดสอบได้สำเร็จ
ตั้งค่าตัวแปรและนำเข้าฟังก์ชัน
คุณสามารถใช้ source
เพื่อ "นำเข้า" ไฟล์ไปยังสภาพแวดล้อมเชลล์ของคุณ เช่นเดียวกับที่คุณอาจใช้ include
คีย์เวิร์ดในภาษา C หรือ C++ เพื่ออ้างอิงไลบรารีหรือ import
คีย์เวิร์ดใน Python เพื่อนำเข้าโมดูล นี่เป็นหนึ่งในการใช้งานทั่วไปที่สุดสำหรับ source
และเป็นการรวมเริ่มต้นทั่วไปใน .bashrc
ไฟล์ไปยัง source
ไฟล์ชื่อ .bash_aliases
เพื่อให้ชื่อแทนที่กำหนดเองใดๆ ที่คุณกำหนดนำเข้ามาในสภาพแวดล้อมของคุณเมื่อคุณเข้าสู่ระบบ
นี่คือตัวอย่างการนำเข้าฟังก์ชัน Bash ขั้นแรก สร้างฟังก์ชันในไฟล์ชื่อ myfunctions
. ซึ่งจะพิมพ์ที่อยู่ IP สาธารณะและที่อยู่ IP ในพื้นที่ของคุณ:
ฟังก์ชัน myip() {
curl https://icanhazip.com
ip addr | grep inet$IP | \
cut -d"/" -f 1 | \
grep -v 127\.0 | \
grep -v \:\:1 | \
awk '{$1=$1};1'
}
นำเข้าฟังก์ชันลงในเชลล์ของคุณ:
$ source myfunctions
ทดสอบฟังก์ชันใหม่ของคุณ:
$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38ก่อน>ค้นหาแหล่งที่มา
เมื่อคุณใช้
source
ใน Bash จะค้นหาไดเรกทอรีปัจจุบันของคุณสำหรับไฟล์ที่คุณอ้างอิง สิ่งนี้ไม่ได้เกิดขึ้นในทุกเชลล์ ดังนั้นโปรดตรวจสอบเอกสารประกอบของคุณหากคุณไม่ได้ใช้ Bashหาก Bash ไม่พบไฟล์ที่จะรัน มันจะค้นหา
PATH
. ของคุณ แทนที่. อีกครั้ง นี่ไม่ใช่ค่าเริ่มต้นสำหรับเชลล์ทั้งหมด ดังนั้นโปรดตรวจสอบเอกสารประกอบของคุณหากคุณไม่ได้ใช้ Bashสิ่งเหล่านี้เป็นคุณสมบัติอำนวยความสะดวกที่ดีใน Bash ลักษณะการทำงานนี้มีประสิทธิภาพอย่างน่าประหลาดใจ เพราะช่วยให้คุณสามารถจัดเก็บฟังก์ชันทั่วไปในตำแหน่งส่วนกลางบนไดรฟ์ของคุณ แล้วปฏิบัติต่อสภาพแวดล้อมของคุณเหมือนกับสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) คุณไม่ต้องกังวลว่าฟังก์ชันของคุณจะถูกเก็บไว้ที่ใด เพราะคุณรู้ว่าฟังก์ชันเหล่านี้เทียบเท่ากับ
/usr/include
ในพื้นที่ของคุณ ดังนั้นไม่ว่าคุณจะอยู่ที่ไหนเมื่อคุณหาแหล่งที่มา Bash ก็พบมันตัวอย่างเช่น คุณสามารถสร้างไดเร็กทอรีชื่อ
~/.local/include
เป็นพื้นที่จัดเก็บสำหรับฟังก์ชันทั่วไป แล้วใส่บล็อกของโค้ดนี้ลงใน.bashrc
. ของคุณ ไฟล์:for i ใน $HOME/.local/include/*;
do source $i
done"นำเข้า" ไฟล์ใดๆ ที่มีฟังก์ชันที่กำหนดเองใน
~/.local/include
ในสภาพแวดล้อมเชลล์ของคุณBash เป็นเชลล์เดียวที่ค้นหาทั้งไดเร็กทอรีปัจจุบันและ
PATH
. ของคุณ เมื่อคุณใช้source
หรือ.
คำสั่งการใช้ซอร์สสำหรับโอเพ่นซอร์ส
การใช้
source
หรือ.
การรันไฟล์อาจเป็นวิธีที่สะดวกในการส่งผลต่อสภาพแวดล้อมของคุณในขณะที่ยังคงรักษาการเปลี่ยนแปลงของคุณให้เป็นโมดูล ครั้งต่อไปที่คุณคิดที่จะคัดลอกและวางโค้ดขนาดใหญ่ลงใน.bashrc
ของคุณ ให้พิจารณาวางฟังก์ชันที่เกี่ยวข้องหรือกลุ่มของนามแฝงลงในไฟล์เฉพาะ แล้วใช้source
ที่จะกินเข้าไป