Trong trường hợp chung, bạn không thể (hoặc không nên ) thay thế các lệnh mặc định. Lý do là nhiều tập lệnh quản trị hệ thống và các gói của bên thứ ba có thể dựa vào các lệnh này để hành xử theo cách chúng thực hiện ngoài hộp trên OS X.
Vì vậy, nếu bạn xóa sạch các lệnh hệ thống và thay thế chúng bằng các tương đương GNU có hành vi không tương thích hoặc đối số dòng lệnh, nó có thể sẽ phá vỡ một cái gì đó. Đặc biệt là nếu bạn sử dụng một số phần mềm được "chuyển" sang Mac OS X sau khi được thiết kế ban đầu để chạy trên Linux hoặc BSD, vì các loại chương trình này có nhiều khả năng dựa vào tập lệnh shell và lệnh hệ thống thay vì gọi API OS X.
Những gì bạn có thể làm là cài đặt một môi trường cài đặt các tiện ích GNU trong thư mục khác mà không ghi đè mặc định, sau đó điều chỉnh PATH
biến môi trường của bạn để nó ưu tiên cho các lệnh được tìm thấy trong thư mục GNU trước khi nó thậm chí tìm kiếm các thư mục hệ thống. Bạn có thể kết nối nó để nó chỉ thiết lập PATH của bạn theo cách đó nếu bạn đang bắt đầu một vỏ tương tác; bạn có thể google làm thế nào để làm điều này với bash
hoặc hỏi một câu hỏi khác trên SU (hoặc tìm kiếm nó, vì có thể nó đã được hỏi trước đó) nếu bạn muốn làm điều đó.
Một ví dụ về môi trường như vậy là Homebrew , ví dụ có GNU sed
trong số những thứ khác. Khi bạn đã cài đặt Homebrew, bạn có thể nhập
brew install coreutils
và cài đặt GNU Coreutils . Những điều này sẽ cung cấp cho bạn sed
, date
, printf
, wc
và nhiều công cụ khác mà tàu với GNU / Linux, nhưng không phải OS X. Tuy nhiên, để không "đè" nhị phân OS X mặc định, họ sẽ được bắt đầu bằng g
theo mặc định. Vì vậy, sau khi cài đặt Coreutils, nếu bạn muốn sử dụng GNU sed, hãy gõ
gsed
Nếu điều này quá rắc rối để gõ mỗi lần, bạn có thể thêm thư mục "gnubin" vào PATH của bạn và chỉ cần gọi GNU sed với sed
. Bạn sẽ cần thêm các mục sau vào ~/.bash_profile
:
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
Tất nhiên, nếu bạn cần một môi trường Linux từ súp đến các loại hạt (kernel, X11, khả năng tương thích tòa nhà, v.v.), bạn sẽ phải chạy Linux trong một máy ảo, chẳng hạn như VirtualBox . Đây là một đặt cược an toàn nếu bạn cần chạy phần mềm hoặc tập lệnh được thiết kế để chạy trên Linux.
Homebrew sẽ chỉ đủ khả năng tương thích cho bạn đối với một số loại chương trình không yêu cầu hành vi dành riêng cho Linux. Ví dụ inotify
chỉ có sẵn trên Linux. drm
(Trình quản lý kết xuất trực tiếp) chỉ khả dụng trên Linux. Có một số cuộc gọi hệ thống cấp thấp khác chỉ có trên Linux và không có tương đương tồn tại trên OS X, do đó, việc chuyển một số chương trình từ Linux sang OS X có thể không thực tế hoặc không thể thực hiện được nếu không có thay đổi mã đáng kể.