2013-09-08 30 views
37

Khi tôi viết các tập lệnh bash cho OS X của tôi để làm những điều chung, tôi tự hỏi đâu là nơi tốt để giữ chúng. Có thư mục nào tôi có thể đặt tất cả chúng vào nơi chúng sẽ được tự động nhặt không? Hoặc tôi nên tạo thư mục của riêng tôi và sau đó tham khảo thư mục này từ .profile hoặc một cái gì đó?Bạn giữ tập lệnh của riêng mình trên OSX ở đâu?

Trả lời

33

Thường là /usr/local/bin, trừ khi bạn không muốn người dùng khác có quyền truy cập vào chúng, trong trường hợp này là $HOME/bin.

+7

+1 Ngoài ra, '/ usr/local/bin' có thể mặc định là' PATH', nhưng '$ HOME/bin' gần như chắc chắn sẽ cần phải được thêm vào. – chepner

+1

@chepner: vâng, đó là sự thật - tôi thường thêm '$ HOME/bin' vào' PATH' của tôi và sử dụng nó để thử nghiệm các tập lệnh và thực thi. –

-3

Trong suy nghĩ của tôi, bạn có thể đặt tập lệnh của mình ở nơi bạn muốn. Nó không thực sự quan trọng trừ khi bạn sử dụng các thư mục specefic hệ thống. Tôi giữ cho tôi trong/scr với quyền root chỉ trên thư mục đó. Đó là conviniant bởi vì tất cả các kịch bản trong thư mục này cần truy cập root để thực hiện một cách chính xác và tôi không muốn người dùng cuối nhìn trộm vào thư mục đó.

11

Tôi đã PATH của tôi thiết lập như:

  • /usr/local/bin
  • /usr/bin
  • /bin
  • /usr/sbin
  • /sbin
  • $HOME/bin

Tôi sử dụng /usr/local/bin cho các lệnh mà tôi có rằng ghi đè các lệnh mặc định. Ví dụ, tôi đã cài đặt Subversion 1.7.7 và OS X đi kèm với 1.6.18. Phiên bản 1.7.7 của svn nằm trong số /usr/local/bin trong khi phiên bản 1.6.18 mặc định của svn nằm trong /usr/bin. Khi tôi nhập svn, tôi nhận được phiên bản mà tôi đã cài đặt thay vì phiên bản đi kèm với OS X. Tôi đã thực hiện việc này với Java, Git, Python và một số tệp nhị phân khác. Hầu hết trong số này là các liên kết tượng trưng. Ví dụ:

$ ls -l /usr/local/bin/ant 
lrwxr-xr-x 1 root wheel  16 Jun 12 11:01 ant -> /opt/ant/bin/ant 

1.9.1 Ant được cài đặt trong /opt/ant (trên thực tế, /opt/apache-ant-1.9.1, nhưng nó tượng trưng liên quan đến /opt/ant). Tôi đã liên kết tất cả các nội dung theo số /opt/ant/bin đến /usr/local/bin, vì vậy nó nằm trong đường dẫn của tôi.

Tôi sử dụng $HOME/bin cho tập lệnh shell cá nhân và các tập lệnh khác. Theo truyền thống, bạn làm cho mục nhập cuối cùng này trong PATH của bạn, vì vậy bạn không vô tình ghi đè một lệnh được xây dựng. Nếu tôi đã thực hiện lệnh shell script có tên là cp, tôi sẽ không ghi đè lệnh /bin/cp.

+3

Tôi đặt '$ HOME/bin' ở phía trước đường dẫn để tôi có thể ghi đè lên các lựa chọn hệ thống (và tôi làm phức tạp đường dẫn của mình bằng cách có nhiều phiên bản Perl và GCC có sẵn trong các thư mục riêng biệt và mặc định là phiên bản mới nhất. sau $ HOME/bin), nhưng nếu không, tôi đi với một hệ thống tương tự như thế này. –

+0

@JonathanLeffler Bạn nên xem [Perlbrew] (http://perlbrew.pl). Nó cho phép bạn dễ dàng chuyển đổi giữa các phiên bản khác nhau của Perl. Đối với những người khác, tôi đặt các tệp nhị phân vào trong '/ opt', sau đó liên kết. Ví dụ, tôi có '/ opt/apache-ant-1.9.1','/opt/apache-ant-1.8.1', '/ opt/apache-ant-1.7.1' Cái tôi muốn sử dụng, Tôi liên kết đến '/ opt/ant'. Sau đó, tôi sẽ liên kết các tệp nhị phân dưới '/ opt/ant/bin' thành'/usr/local/bin'. Để chuyển đổi các phiên bản, tôi chỉ thay đổi liên kết trong '/ opt' –

+0

@JonathanLeffler Có một truyền thống để giữ' $ HOME/bin' ở cuối đường dẫn của bạn vì lý do _security_. Điều này đã trở lại trong những ngày khi mọi người ở trên cùng một hộp Unix. Nó có thể không áp dụng nhiều nữa. Tôi sử dụng '$ HOME/bin' chủ yếu cho các kịch bản lệnh shell và các kịch bản lệnh khác. Các tệp nhị phân được cài đặt ở nơi khác và được liên kết với '/ usr/local/bin' –

5

Tôi sử dụng ~/bin để thực thi và tập lệnh tôi đã tự viết và /usr/local/bin để thực thi và tập lệnh mà tôi không tự viết.

/usr/local/bin được sử dụng bởi Homebrew, pip (và gemnpm cài đặt bởi Homebrew), như là mục tiêu mặc định cho make install, và bởi một số .pkg trình cài đặt.

Tôi từng có một thư mục riêng cho các tập lệnh thực thi và tập lệnh mà tôi không tự viết và không được đặt trong /usr/local/bin theo mặc định. Nhưng nó chứa rất ít tệp mà tôi đã chuyển tất cả các tệp trong đó sang /usr/local/bin.

Tôi có thể tìm thấy nội dung không phải của Homebrew ở /usr/local/bin với find /usr/local/bin ! -lname '../Cellar/*'.

tôi không sử dụng /usr/local/bin cho các kịch bản tôi đã viết bản thân mình, vì /usr/local/bin đã chứa khoảng 1.000 tác phẩm khác, và ~/bin (hoặc bin) thường được dễ dàng hơn để gõ.

Tôi đã thêm setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin đến /etc/launchd.conf. Có /usr/local/bin trước khi các thư mục khác có khả năng nguy hiểm và ví dụ một số lệnh TextMate ngừng hoạt động vì nó, nhưng cũng thuận tiện để có các phiên bản lệnh mới hơn trước phiên bản được cài đặt hệ thống và sử dụng cùng một đường dẫn ở mọi nơi.

Các vấn đề liên quan