หลังจากเริ่มต้น bash terminal ฉันสังเกตเห็นว่าตัวแปร PATH มีรายการที่ซ้ำกัน ขั้วของฉันเริ่มต้นเปลือกเข้าสู่ระบบเพื่อให้~/.bash_profile
มีที่มาตามด้วยและ~/.profile
~/.bashrc
ใน~/.profile
ฉันจะสร้างรายการเส้นทางที่ซ้ำกัน
นี่คือลำดับที่ไฟล์ที่ควรจะมีแหล่งที่มาจะถูกแหล่งที่มา:
Sourced /etc/profile
Sourced /etc/bash.bashrc
Sourced .bash_profile
Sourced .profile
Sourced .bashrc
ก่อนที่ทุกคนจะทำเครื่องหมายสิ่งนี้ว่าเป็น "สำเนาของตัวแปร PATH ที่มีรายการซ้ำ" โปรดอ่านต่อไป
ตอนแรกฉันคิดว่าสิ่งนี้เกี่ยวข้องกับ~/.profile
การจัดหาแหล่งข้อมูลสองครั้งดังนั้นฉันจึงเขียนไฟล์ลงในไฟล์บันทึกเมื่อใดก็ตามที่มีแหล่งที่มาและน่าประหลาดใจที่มีการบันทึกเพียงหนึ่งรายการ ยิ่งน่าแปลกใจคือความจริงที่ว่าเมื่อผมแสดงความคิดเห็นออกรายการที่อยู่ใน~/.profile
รายการยังคงปรากฏในPATH
ตัวแปร สิ่งนี้ทำให้ฉันมีข้อสรุปสามประการซึ่งหนึ่งในนั้นถูกตัดออกอย่างรวดเร็ว:
- Bash ละเว้นความคิดเห็น bash ที่ถูกต้องและยังคงดำเนินการรหัสความคิดเห็น
- มีสคริปต์ที่อ่าน
~/.profile
และไม่สนใจรหัสใด ๆ ที่พิมพ์เอาต์พุต (ตัวอย่างเช่นล็อกไฟล์) - มีอีกฉบับหนึ่งของฉัน
~/.profile
ที่กำลังถูกหาที่อื่น
อันแรกฉันสรุปได้อย่างรวดเร็วว่าไม่ใช่เพราะการทดสอบที่รวดเร็ว ตัวเลือกที่สองและสามเป็นสิ่งที่ฉันต้องการความช่วยเหลือ
ฉันจะรวบรวมบันทึกสคริปต์ที่ดำเนินการได้อย่างไรเมื่อเทอร์มินัลเริ่มทำงาน ฉันใช้echo
ในไฟล์ที่ฉันตรวจสอบเพื่อทราบว่าไฟล์เหล่านั้นมาจากการทุบตีหรือไม่ แต่ฉันต้องหาวิธีการสรุปที่ติดตามการดำเนินการถึงจุดเมื่อเทอร์มินัลพร้อมให้ฉันเริ่มพิมพ์มัน
ถ้าข้างต้นเป็นไปไม่ได้แล้วทุกคนสามารถแนะนำที่อื่นฉันสามารถมองเพื่อดูว่าสคริปต์จะถูกเรียกใช้
การอ้างอิงในอนาคต
นี่คือสคริปต์ที่ฉันใช้ในการเพิ่มเส้นทางของฉัน:
function add_to_path() {
for path in ${2//:/ }; do
if ! [[ "${!1}" =~ "${path%/}" ]]; then # ignore last /
new_path="$path:${!1#:}"
export "$1"="${new_path%:}" # remove trailing :
fi
done
}
ฉันใช้มันแบบนี้:
add_to_path 'PATH' "/some/path/bin"
สคริปต์ตรวจสอบว่าเส้นทางมีอยู่แล้วในตัวแปรก่อนที่จะเตรียมมัน
สำหรับผู้ใช้ zsh คุณสามารถใช้สิ่งนี้ได้:
function add_to_path() {
for p in ${(s.:.)2}; do
if [[ ! "${(P)1}" =~ "${p%/}" ]]; then
new_path="$p:${(P)1#:}"
export "$1"="${new_path%:}"
fi
done
}
แก้ไข 28/8/2018
อีกสิ่งหนึ่งที่ฉันพบว่าฉันสามารถทำได้กับสคริปต์นี้คือการแก้ไขเส้นทางด้วย ดังนั้นเมื่อเริ่มต้น.bashrc
ไฟล์ของฉันฉันจะทำสิ่งนี้:
_temp_path="$PATH"
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
add_to_path 'PATH' "$_temp_path"
unset _temp_path
มันขึ้นอยู่กับคุณว่าPATH
ควรเริ่มต้นด้วยอะไร ตรวจสอบPATH
ก่อนตัดสินใจ
~/.profile
และ~/.bashrc
จาก~/.bash_profile
~/.profile
ถ้า~/.bash_profile
ไม่ได้อยู่ ...