Có thể lấy bộ đầy đủ các tùy chọn unix cho các công cụ dòng lệnh trên OS X không?


14

Tôi làm theo Mẹo công cụ Unix trên Twitter và điều thú vị là nhiều mẹo được đăng không có sẵn trên OS X.

Ví dụ:

cp - u sẽ chỉ sao chép các tệp không tồn tại hoặc mới hơn các đối tác hiện có của chúng trong thư mục đích.

Thử điều này trên máy của tôi cho kết quả:

cp: illegal option -- u
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
   cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory  

Tại sao các tùy chọn này không khả dụng và có thể truy cập chúng trên OS X không?


Bạn cũng có thể cài đặt find, sed và awk với brew install coreutils findutils gnu-sed gawk. Xem apple.stackexchange.com/questions/69223/ .
Lri

Cảnh báo: nếu bạn cài đặt và sử dụng các phiên bản GNU của công cụ cli, bạn sẽ có các tiện ích mở rộng của GNU, nhưng bạn cũng mất các tiện ích mở rộng trong phiên bản công cụ của OS X. Ví dụ: lệnh cp trong coreutils của homebrew (được đặt tên gcpđể tránh nhầm lẫn) không biết cách sao chép siêu dữ liệu phức tạp mà các tệp OS X có thể có (mở rộng, v.v.); Vì vậy, nếu bạn sử dụng gcptrên một tệp bí danh, bản sao sẽ thiếu thông tin quan trọng và sẽ không hoạt động.
Gordon Davisson

@GordonDavisson cảm ơn vì đã ngẩng cao đầu. Đó có phải là .file được thêm vào tất cả các thư mục của tôi không? Tôi nghĩ rằng đó có thể là một điểm cộng :)
DQdlM

@KennyPeanuts: Ý bạn là tệp .DS_Store? Điều đó tương tự nhưng không phải là những gì tôi đang nói (và gcp -Rsẽ sao chép nó cùng với mọi thứ khác). Nếu bạn muốn nói ._somefilename, đó là một tệp AppleDouble được sử dụng để lưu trữ siêu dữ liệu (thông tin mà tôi đang nói đến) trên một số loại khối lượng nước ngoài, điều này ... phức tạp ...
Gordon Davisson

@GordonDavisson cảm ơn đã làm rõ. Đó là những tập tin ._somefilename mà tôi đang nói đến.
DQdlM

Câu trả lời:


12

Nhận homebrew và có nó cài đặt các tiện ích cốt lõi. Sau đó, bạn có thể xem phiên bản GNU của cp có hỗ trợ các cờ bạn muốn không. Đây là một câu trả lời hay trên trang web đối tác và tôi sẽ trích dẫn các bước chính xác mà bạn cần để cp được thay thế bằng phiên bản GNU nếu bạn muốn:

Đây là homebrew - http://mxcl.github.com/homebrew/
Đây là câu chuyện dài - /superuser/476575/replace-os-xs-shell-commands-with-the-linux-versions/ 476594 # 476594


Một ví dụ về môi trường như vậy là [Homebrew] ( http://mxcl.github.com/homebrew/ ), ví dụ có GNU sedtrong 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, wcvà 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 gtheo 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"


Cài đặt bằng cách sử dụng có ổn không port?
Adil Soomro

1
@AdilSoomro macports.org là một công cụ lâu đời với danh tiếng tốt. Tôi thấy không có lý do gì để không thử nó - tôi chỉ không có kinh nghiệm và sử dụng và đóng góp cho homebrew.
bmike

3

Lý do là OSX sử dụng các công cụ dòng lệnh BSD và người dùng mẹo công cụ Unix có thể đang sử dụng Linux sử dụng các công cụ dòng lệnh GNU.

Bạn có thể cài đặt các công cụ GNU trên OSX (và BSD trên Linux).

Cách dễ nhất là sử dụng trình quản lý gói như Macports, Homebrew hoặc Fink

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.