Bash trong Linux vs Mac OS


27

Tôi đang mua một chiếc iMac. Tôi đã làm việc trên Linux trong một thời gian dài và tôi thực hiện một loạt các kịch bản bash. Tôi đã tự hỏi nếu tất cả các lệnh bash và tính năng có sẵn trên Mac OS? Bất cứ ai cũng có bất kỳ kinh nghiệm với Mac bash scripting? Tôi đánh giá cao đầu vào của bạn.

Câu trả lời:


32

Bash chính nó sẽ giống nhau. Sẽ có một vài khác biệt nhỏ nhưng không có sự khác biệt nào trong số này sẽ ảnh hưởng đến tính di động của tập lệnh của bạn.

Vấn đề chính là các lõi MacOS dựa trên FreeBSD trong khi các tiện ích bạn thường sử dụng rất có thể từ dự án GNU. Coreutils FreeBSD không phải lúc nào cũng tương thích với coreutils GNU. Có sự khác biệt về hiệu năng và hành vi giữa các phiên bản GNU và FreeBSD của sed , grep , pscác tiện ích khác .

Bạn có thể cài đặt các coreutils GNU nhưng họ có g-tiền tố (ví dụ như gcatcho cat). Nó không phải là một ý tưởng tốt để thay thế cho hệ điều hành MacOS coreutils với coreutils GNU.


6
Cần phải khuếch đại rằng việc sử dụng các tiện ích cốt lõi dựa trên FreeBSD có thể ảnh hưởng đến tính di động của các tập lệnh của bạn (ví dụ: pscó các cờ khác nhau, như vậy grep). Tôi đã đập đầu vào tường một vài lần để tìm hiểu tại sao tập lệnh Ubuntu của tôi không tạo ra cùng một đầu ra trên máy Mac của tôi.
Chris Gregg

1
Nếu bạn muốn viết các tập lệnh của mình thành di động, www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp là một nơi tuyệt vời để có được các thông số kỹ thuật tiêu chuẩn nghiêm ngặt cho các lệnh và tiện ích POSIX và XCU.
kojiro

@ChrisGregg: Tôi đồng ý. Tôi đã thêm một chút vào câu trả lời của mình để nhấn mạnh rằng có sự không tương thích giữa hai bộ công cụ.

5

Nếu có vấn đề, bashtrên Mac OS X Mountain Lion vẫn là phiên bản 3.2. Hầu hết các bản phân phối linux hiện nay đều được vận chuyển với 4.x, vì vậy bạn sẽ thiếu các tính năng của phiên bản 4. Hiện tại, phiên bản 4.2.45 có sẵn từ Homebrew như một cách giải quyết. Tôi không biết phiên bản nào trong Mavericks, tôi không chắc ai biết được phép nói gì.

Như đã đề cập bởi những người khác, bashgiống nhau bash(khác với các phiên bản đã được ghi chú) nhưng Mac OS X sử dụng vùng người dùng BSD (chủ yếu). Nhiều tiện ích hệ thống tiêu chuẩn có các tùy chọn hơi khác nhau hoặc hoạt động hơi khác nhau. Thật không may là quá nhiều để liệt kê ở đây.


2
4 năm sau bash trên High Sierra vẫn đang sử dụng: GNU bash, phiên bản 3.2.57 (1) -release (x86_64-apple-darwin17) Bản quyền (C) 2007 Free Software Foundation, Inc.
Nate Lockwood

4

Cài đặt homebrew (trình quản lý gói) sau đó cài đặt phiên bản gnu của một số tiện ích cơ bản:

$ brew install coreutils
$ brew install gnu-sed

Sau mỗi lần cài đặt, nó sẽ hiển thị các bước mà bạn có thể làm theo để bạn có thể gọi đơn giản datethay vì gdateví dụ, để bạn vẫn có thể sử dụng các tập lệnh bash Linux của mình mà không cần sửa đổi.

Xin chúc mừng, bạn vừa giải quyết 99% các vấn đề về kịch bản đa nền tảng của mình.


3
Mặt khác, nếu các tập lệnh của bạn thực sự có nghĩa là có thể mang theo được, bạn sẽ muốn sửa các tập lệnh chứ không phải các triệu chứng.
tripleee

2

Một điều có thể gây nản lòng khi chuyển từ Linux sang Mac là không có /prochệ thống tệp giả. Điều này đã phá vỡ một số tập lệnh Linux của tôi và thật khó để tìm ra những cách phù hợp để có được thông tin giống như bạn tìm thấy trong proctập lệnh bash Mac của bạn.


0

Tôi là người dùng 'chủ yếu là linux, thỉnh thoảng là mac' và tôi thấy rằng:

bash, ~/.bashrc~/.bash_aliaseschủ yếu làm việc như nhau.

Một vấn đề tôi đã tìm thấy là một trong những lệnh thay đổi dấu nhắc màu không hoạt động trên Mac. Từ đó và những kinh nghiệm khác tôi đã học được để mở cửa sổ đầu cuối và đăng nhập khi thiết lập .bashrctệp của mình . Đó là tôi có thể kiểm tra 'cửa sổ mới' và tìm thấy bất kỳ lỗi nào trong phần vẫn đăng nhập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.