Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

นำเข้าฟังก์ชันและตัวแปรลงใน Bash ด้วยคำสั่งซอร์ส

เมื่อคุณเข้าสู่ระบบเปลือก 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 ที่จะกินเข้าไป