ปัญหาสองประการเกิดขึ้นเมื่อพยายามโหลดไฟล์ / source ~ / .profile ซ้ำ [หมายถึง Ubuntu linux - ในบางกรณีรายละเอียดของคำสั่งจะแตกต่างกัน]
- คุณเรียกใช้สิ่งนี้โดยตรงในเทอร์มินัลหรือในสคริปต์หรือไม่?
- คุณเรียกใช้สิ่งนี้ในสคริปต์ได้อย่างไร
การโฆษณา 1)
การรันสิ่งนี้โดยตรงในเทอร์มินัลหมายความว่าจะไม่มีการสร้าง subshell ดังนั้นคุณสามารถใช้สองคำสั่ง:
source ~/.bash_profile
หรือ
. ~/.bash_profile
ในทั้งสองกรณีนี้จะอัปเดตสภาพแวดล้อมด้วยเนื้อหาของไฟล์. profile
โฆษณา 2) คุณสามารถเริ่มสคริปต์ทุบตีโดยการโทร
sh myscript.sh
หรือ
. myscript.sh
ในกรณีแรกสิ่งนี้จะสร้าง subshell ที่จะไม่ส่งผลกระทบต่อตัวแปรสภาพแวดล้อมของระบบของคุณและจะมองเห็นได้เฉพาะในกระบวนการ subshell เท่านั้น หลังจากเสร็จสิ้นคำสั่ง subshell จะไม่มีการส่งออก ฯลฯ ใด ๆ จะไม่ถูกนำไปใช้ นี่เป็นความผิดพลาดทั่วไปและเป็นสาเหตุให้นักพัฒนาจำนวนมากเสียเวลาไปมาก
เพื่อให้การเปลี่ยนแปลงของคุณที่ใช้ในสคริปต์ของคุณมีผลกับสภาวะแวดล้อมส่วนกลางสคริปต์จะต้องถูกรันด้วย
.myscript.sh
คำสั่ง
เพื่อให้แน่ใจว่าสคริปต์ของคุณไม่ได้ถูกรันใน subshel คุณสามารถใช้ฟังก์ชันนี้ได้ (ตัวอย่างอีกครั้งสำหรับ Ubuntu shell)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
ฉันหวังว่าสิ่งนี้จะช่วยขจัดความเข้าใจผิดที่พบบ่อยได้! : D ขอให้โชคดี!