Homebrew วางไบนารีของ OpenVPN ไว้ใน sbin ไม่ใช่ใน PATH ของคุณ
สูตรนี้ติดตั้งดีมอน OpenVPN ไว้ใต้ sbin ซึ่ง PATH มาตรฐานของ macOS ไม่ได้รวมไว้ ยืนยันคำนำหน้าแล้วแก้การค้นหาให้ถูกในไฟล์เดียว
การติดตั้งเสร็จสิ้น 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 ยังมาพร้อมเอนจินของตัวเอง ดังนั้นเวอร์ชันที่คุณเพิ่งพิมพ์อาจไม่เกี่ยวข้องกับเวอร์ชันที่แอปพลิเคชันใช้
บันทึกว่าไฟล์เรียกทำงานใดสร้างเอาต์พุตเวอร์ชัน บรรทัดเดียวนั้นช่วยประหยัดเวลาหนึ่งชั่วโมงในครั้งหน้าที่สองเวอร์ชันไม่ตรงกัน