ในกรณีทั่วไปคุณไม่สามารถ (หรือไม่ควร ) แทนที่คำสั่งเริ่มต้นได้เลย เหตุผลก็คือสคริปต์การดูแลระบบจำนวนมากและแพคเกจของบุคคลที่สามอาจใช้คำสั่งเหล่านี้ในการทำงานตามที่พวกเขาทำได้นอกกรอบบน OS X
ดังนั้นหากคุณเพียงแค่ล้างคำสั่งของระบบและแทนที่ด้วย GNU เทียบเท่าที่มีพฤติกรรมที่ไม่เข้ากันหรืออาร์กิวเมนต์บรรทัดคำสั่งก็อาจจะทำลายบางสิ่งบางอย่าง โดยเฉพาะอย่างยิ่งหากคุณใช้ซอฟต์แวร์บางตัวที่ "เชื่อมต่อ" กับ Mac OS X หลังจากที่ได้รับการออกแบบมาให้ทำงานบน Linux หรือ BSD เนื่องจากโปรแกรมประเภทนี้มีแนวโน้มที่จะพึ่งพาเชลล์สคริปต์และคำสั่งระบบแทนการเรียก OS X API
สิ่งที่คุณสามารถทำได้คือติดตั้งสภาพแวดล้อมที่ติดตั้งยูทิลิตี้ GNU ในไดเรกทอรีอื่นโดยไม่เขียนทับค่าเริ่มต้นจากนั้นปรับPATH
ตัวแปรสภาพแวดล้อมของคุณเพื่อให้ความสำคัญกับคำสั่งที่พบในไดเรกทอรี GNU ก่อนที่จะค้นหาไดเรกทอรีระบบ คุณสามารถวางสายนี้เพื่อให้มันตั้งค่า PATH ของคุณแบบนั้นถ้าคุณเริ่มเชลล์เชิงโต้ตอบ คุณสามารถ google วิธีการทำเช่นนี้กับbash
หรือถามคำถามอื่นใน SU (หรือค้นหาเพราะอาจถูกถามก่อน) หากคุณต้องการทำเช่นนั้น
ตัวอย่างของสภาพแวดล้อมเช่นHomebrewซึ่งตัวอย่างมี GNU sed
เหนือสิ่งอื่นใด เมื่อคุณติดตั้ง Homebrew แล้วคุณสามารถพิมพ์
brew install coreutils
และติดตั้งGNU coreutils เหล่านี้จะช่วยให้คุณมีsed
, date
, printf
, wc
และเครื่องมืออื่น ๆ อีกมากมายที่มาพร้อมกับ GNU / Linux แต่ไม่ OS X ได้อย่างไรก็ตามเพื่อไม่ให้ "แทนที่" เริ่มต้น OS X ไบนารีที่พวกเขาจะนำหน้าด้วยg
โดยปริยาย ดังนั้นหลังจากติดตั้ง Coreutils แล้วหากคุณต้องการใช้ GNU sed ให้พิมพ์
gsed
ถ้าเป็นแบบนี้มากเกินไปของการทะเลาะพิมพ์ทุกครั้งที่คุณสามารถเพิ่ม "gnubin directory" เพื่อเส้นทางของคุณและเพียงโทร GNU sed sed
กับ คุณจะต้องเพิ่มสิ่งต่อไปนี้ใน~/.bash_profile
:
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
แน่นอนถ้าคุณจำเป็นต้องมีสภาพแวดล้อมลินุกซ์จากซุปถั่ว (เคอร์เนล, X11, เข้ากันได้ syscall ฯลฯ ) คุณจะต้องใช้ Linux ในเครื่องเสมือนเช่นVirtualBox นี่เป็นเดิมพันที่ปลอดภัยถ้าคุณต้องการเรียกใช้ซอฟต์แวร์หรือสคริปต์ที่ออกแบบมาเพื่อทำงานบน Linux
Homebrew จะจ่ายให้คุณสำหรับความเข้ากันได้ของคลาสบางโปรแกรมที่ไม่ต้องการลักษณะการทำงานเฉพาะของ Linux ตัวอย่างเช่นinotify
มีเฉพาะใน Linux drm
(Direct Rendering Manager) มีเฉพาะใน Linux มีการเรียกระบบระดับต่ำอื่น ๆ ที่ใช้งานได้บน Linux เท่านั้นและไม่มีการเทียบเท่าบน OS X ดังนั้นการย้ายโปรแกรมบางโปรแกรมจาก Linux ไปยัง OS X อาจไม่สามารถใช้งานได้หรือเป็นไปไม่ได้หากไม่มีการเปลี่ยนแปลงรหัสที่สำคัญ