“ whereis” และ“ ซึ่ง” คืนค่าเส้นทางที่แตกต่างใน Mac OS X


27

ฉันได้รับค่าเริ่มต้น OpenSSL 9.8 (Mac OS X 10.6.8) และตัดสินใจที่จะติดตั้งเวอร์ชันใหม่ล่าสุด (1.0.1) ผ่านทาง MacPorts ( sudo port install openssl)

นี่คือคอนโซลเอาต์พุตซึ่งคำสั่งและwhereis :

$ whereis openssl
/usr/bin/openssl

(นี่คือระบบเริ่มต้น)

$which openssl
/opt/local/bin/openssl

(สิ่งนี้ติดตั้งผ่าน MacPorts)

$ openssl version
OpenSSL 1.0.1c 10 May 2012

(มีรุ่นของพอร์ต Mac ใน PATH)

เหตุใดจึงมีเส้นทางที่แตกต่างกันwhereisและwhichและเป็นไร มีวิธีใดบ้างที่จะได้ผลลัพธ์ที่เท่าเทียมกัน?

คำตอบ:


31

ใน manpage ของwhereisมันชัดเจนว่า (เน้นเหมือง):

ยูทิลิตี้ whereis จะตรวจสอบไดเรกทอรีไบนารีมาตรฐานสำหรับโปรแกรมที่ระบุโดยพิมพ์เส้นทางของที่พบ

เส้นทางที่ค้นหาคือสตริงที่ส่งคืนโดยยูทิลิตี sysctl (8) สำหรับสตริง `` user.cs_path ''

ตรงกันข้ามกับที่whichเป็นเครื่องมือที่ใช้กันทั่วไปเพื่อตรวจสอบที่ไบนารีสำหรับเส้นทางของผู้ใช้ของคุณ

ยูทิลิตีใดจะใช้รายการชื่อคำสั่งและค้นหาพา ธ สำหรับไฟล์เรียกทำงานแต่ละไฟล์ที่จะเรียกใช้หากคำสั่งเหล่านี้ถูกเรียกใช้จริง

ที่อธิบายถึงความแตกต่างของคุณเนื่องจาก/opt/local/binไม่ได้เป็นทั้งระบบ "มาตรฐาน" เส้นทางหลังจากทั้งหมด MacPorts เป็นตัวเลือกสมบูรณ์ติดตั้งและsysctlมีเพียง/usr/bin:/bin:/usr/sbin:/sbinในของมันuser.cs_pathเริ่มต้นต่อ

โดยทั่วไปติดwhichหรือจะหาไบนารีมากกว่าการใช้which -awhereis


ในทางทฤษฎีคุณสามารถเปลี่ยนuser.cs_pathผ่าน

sysctl -w user.cs_path=/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

แต่ฉันไม่รู้ว่านี่เป็นความคิดที่ดีหรือไม่


ขอขอบคุณคุณเน้นว่า "ยูทิลิตี้ whereis ตรวจสอบไดเรกทอรีไบนารีมาตรฐาน " - นั่นคือคำตอบ! ไม่สามารถโหวตให้คุณตอบได้เพราะชื่อเสียงน้อย ((
jctim

ไม่ต้องกังวลคุณจะได้รับชื่อเสียงมากขึ้นในไม่ช้า ยินดีต้อนรับสู่ Super User! :)
slhck

มีปัญหาเดียวกันกับ psql ใน OS X แต่น่าเสียดายที่ user.cs_path ไม่สามารถเขียนได้ ใกล้กับโซลูชันของฉันขอบคุณสำหรับคำตอบที่มีประโยชน์!
user208769
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.