การติดตั้งเสร็จสิ้น brew บอกว่า openvpn อยู่ที่นั่น แต่เชลล์กลับตอบว่า command not found ไบนารีมีอยู่จริง มันเพียงอยู่ในไดเรกทอรีที่เชลล์ไม่เคยได้รับแจ้ง Homebrew เชื่อมไบนารีแบบดีมอนเข้าไปในไดเรกทอรี sbin ของคำนำหน้า และ PATH มาตรฐานของ macOS มักรวมไดเรกทอรี bin ไว้แต่ไม่รวม sbin ไม่มีอะไรเสีย และการติดตั้งใหม่ก็ไม่เปลี่ยนแปลงสิ่งนี้

การตรวจสอบสี่ข้อจะยืนยันกลไกนี้ก่อนที่คุณจะแก้ไขไฟล์เชลล์ใด ๆ

สูตรนี้ติดตั้งอะไรจริง ๆ

สูตร openvpn สร้างดีมอนแบบบรรทัดคำสั่ง ดังนั้นไฟล์เรียกทำงานจึงไปอยู่ใต้ sbin ไม่ใช่ bin จากนั้น Homebrew เชื่อมไบนารีนั้นเข้าไปในไดเรกทอรี sbin ของคำนำหน้า นี่คือเหตุผลที่ "$(brew --prefix)/sbin/openvpn" --version ทำงานได้ ในขณะที่การเรียกเปล่า ๆ กลับไม่ทำงาน ไดเรกทอรี Cellar ที่มีเลขเวอร์ชันก็เก็บสำเนาไว้ด้วย และการใส่พาธนั้นลงในไฟล์เริ่มต้นคือวิธีที่เครื่องยังคงยึดติดกับบิลด์เก่าหลังอัปเกรด

ลิงก์สัญลักษณ์ของคำนำหน้าคือพาธที่มั่นคง ส่วนพาธ Cellar เป็นรายละเอียดการทำงานที่มีเลขเวอร์ชันอยู่ข้างใน

ถาม Homebrew ไม่ใช่ระบบไฟล์

เริ่มจากตัวจัดการแพ็กเกจ เพราะมันรู้ว่าการติดตั้งใดเป็นเจ้าของสูตร: command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn ถ้าคำสั่งสุดท้ายพิมพ์พาธออกมา แสดงว่าสูตรมีอยู่และคำถามอยู่ที่การค้นหาเพียงอย่างเดียว ถ้าไม่พิมพ์อะไรเลย เชลล์กำลังค้นหาแพ็กเกจที่ไม่เคยถูกติดตั้งในที่ผิด ซึ่งเป็นปัญหาอีกอย่างที่มีวิธีแก้ต่างกัน

การมี Homebrew สองชุดบนเครื่องเดียวคือจุดที่เรื่องนี้สำคัญที่สุด brew ที่ตอบไม่จำเป็นต้องเป็น brew ที่ติดตั้ง

ทำไมเชลล์จึงมองไม่เห็น sbin

เชลล์ตอนล็อกอินสร้าง PATH จากค่ามาตรฐานของระบบบวกกับสิ่งที่ไฟล์เริ่มต้นของคุณเพิ่มเข้าไป Homebrew bin มักถูกเพิ่ม แต่ Homebrew sbin มักไม่ถูกเพิ่ม คำสั่งทุกอย่างจึงทำงานยกเว้นดีมอน command -v openvpn ที่ไม่คืนอะไรเลยในขณะที่พาธที่มีคำนำหน้าคืนค่าเวอร์ชัน คือการวินิจฉัยทั้งหมดในสองคำสั่ง ยืนยันว่าไดเรกทอรีนั้นมีลิงก์จริงด้วย ls -l "$(brew --prefix)/sbin/openvpn"

ลิงก์ที่หายไปเป็นคนละความผิดกับรายการ PATH ที่หายไป และมีเพียงอย่างเดียวที่แก้ได้ด้วยการแก้ไขไฟล์เชลล์

แก้พาธครั้งเดียว ในที่เดียว

สำหรับการทดสอบเร็วในเชลล์ปัจจุบัน eval "$(brew shellenv)" ตั้งค่าตัวแปรการติดตั้งและวางไดเรกทอรีทั้งสองไว้ข้างหน้า สำหรับการตั้งค่าถาวร ให้ใส่บรรทัด shellenv ลงในไฟล์เริ่มต้นไฟล์เดียวที่เชลล์ของคุณอ่านสำหรับโหมดล็อกอินที่คุณใช้ แทนที่จะกระจาย export ไปตามไฟล์ bash และ zsh

จากนั้นเปิดเทอร์มินัลใหม่แล้วถามเวอร์ชันซ้ำ เพราะเชลล์ที่แคชไว้ยังคงรายงาน PATH เก่า

แยกการค้นหาให้ห่างจากบริการ

การหาไบนารีไม่เหมือนกับการรันบริการ VPN การเริ่ม openvpn อัตโนมัติเพิ่มข้อกำหนดด้านโปรไฟล์ ข้อมูลรับรอง สิทธิ์ และวงจรชีวิตที่การค้นหาแพ็กเกจไม่เคยแตะต้อง Tunnelblick ยังมาพร้อมเอนจินของตัวเอง ดังนั้นเวอร์ชันที่คุณเพิ่งพิมพ์อาจไม่เกี่ยวข้องกับเวอร์ชันที่แอปพลิเคชันใช้

บันทึกว่าไฟล์เรียกทำงานใดสร้างเอาต์พุตเวอร์ชัน บรรทัดเดียวนั้นช่วยประหยัดเวลาหนึ่งชั่วโมงในครั้งหน้าที่สองเวอร์ชันไม่ตรงกัน

บทความที่เกี่ยวข้อง