Sự cố với $ PATH và tệp thực thi


8

Tôi có một tập tin thực thi unix nằm trong một thư mục tôi tạo. Tôi tin rằng tôi cần lấy thư mục này trong $PATHtệp để thực thi unix có thể thực thi được, nhưng tài liệu về mã nguồn nói rằng tôi cần chỉnh sửa tệp cấu hình shell của mình để thêm $home/meme/binvào đường dẫn shell của tôi.

Câu trả lời:


10

Nếu bạn muốn có thể thực thi một chương trình bằng cách gõ tên của nó trên dòng lệnh, thì chương trình thực thi phải nằm trong một trong các thư mục được liệt kê trong PATHbiến môi trường. Bạn có thể thấy giá trị hiện tại của biến như thế này ( $là dấu nhắc của bạn và giá trị bên dưới là một ví dụ):

$ echo $PATH
/home/drbunsen/bin:/usr/local/bin:/usr/bin:/bin

Bạn có nhiều lựa chọn; trong khi # 1 và # 2 liên quan đến các khái niệm ít nâng cao hơn, tôi khuyên bạn nên # 3 ít hoạt động hơn trong thực tế:

  • Bạn có thể đặt tệp thực thi trong một thư mục đã có trên của bạn PATH. Ví dụ, nếu /home/drbunsen/binđã có trên của bạn PATH, bạn có thể đặt tệp thực thi ở đó. Hoặc bạn có thể đặt tệp thực thi /usr/local/binnếu bạn muốn nó có sẵn cho tất cả người dùng.
  • Bạn có thể thêm thư mục chứa tệp thực thi trong PATH. Chỉnh sửa tệp ~/.profile( ~/có nghĩa là tệp nằm trong thư mục chính của bạn) (tạo tệp nếu nó không tồn tại). Thêm một dòng như thế này:

    PATH=$PATH:$HOME/meme/bin
    

    (Lưu ý rằng nó $HOME, không phải $home, unix thường phân biệt chữ hoa chữ thường. Bạn cũng có thể viết ~/meme/bin, ~là từ đồng nghĩa $HOMEkhi nó ở đầu đường dẫn tệp.) Thay đổi sẽ có hiệu lực vào lần đăng nhập tiếp theo. cùng một dòng trong một thiết bị đầu cuối và nó sẽ ảnh hưởng đến trình bao chạy trong thiết bị đầu cuối đó và bất kỳ chương trình nào được khởi chạy từ nó.

  • Cách tiếp cận tôi khuyên dùng là giữ cho tệp thực thi với các tệp khác là một phần của chương trình, trong một thư mục của riêng nó, nhưng cũng không thay đổi PATH.
    Giữ thực thi trong $HOME/memecó lợi thế là nếu bạn muốn loại bỏ hoặc nâng cấp chương trình, mọi thứ đều ở một nơi. Một số chương trình thậm chí yêu cầu điều này để tìm các tệp họ sử dụng. Không thay đổi PATHcó lợi thế là cài đặt và gỡ cài đặt chương trình là công việc ít hơn.
    Để có được điều tốt nhất của cả hai thế giới, hãy tạo một liên kết tượng trưng trong một thư mục trên của bạn PATH, chỉ vào thực thi thực tế. Từ dòng lệnh, chạy một lệnh như thế này:

    cd ~/bin
    ln -s ../meme/bin/* .
    

    Đó là giả định rằng ~/binđã có trên của bạn PATH; nếu không, hãy thêm nó ~/.profilenhư được chỉ ra ở trên. Chọn một địa điểm khác nếu bạn thích. Bây giờ làm cho các chương trình có sẵn là một vấn đề tạo ra các liên kết tượng trưng; làm cho chúng không có sẵn là một vấn đề loại bỏ các liên kết tượng trưng; và bạn có thể dễ dàng theo dõi những chương trình bạn đã cài đặt thủ công và nơi chúng sống bằng cách xem các liên kết tượng trưng.


Gilles, wow cảm ơn bạn RẤT NHIỀU lời giải thích chi tiết. Tôi thực sự đánh giá cao sự giúp đỡ của bạn. Cảm ơn đã dành thời gian để trả lời chi tiết câu hỏi của tôi và ở mức độ làm cho mọi thứ rõ ràng.
dr.bunsen

Một điều khác mà tôi nhận thấy là trong thư mục home / meme / không xuất hiện một thư mục / bin. Tôi có cần tạo thùng để tôi có thể tạo liên kết tượng trưng ở đây với tôi PATHkhông? Cảm ơn.
dr.bunsen

@ dr.bunsen ~/binlà một vị trí phổ biến và một số bản phân phối tạo nó tự động. Nếu không, bạn sẽ phải tạo và thêm nó vào PATHthủ công. Địa điểm ~/binchỉ là một quy ước, bạn có thể chọn một tên khác nếu bạn muốn.
Gilles 'SO- ngừng trở nên xấu xa'

Lệnh ký tự đại diện không hoạt động vì ln diễn giải mục cuối cùng trong bản mở rộng dưới dạng thư mục: "Cách sử dụng: ln [TÙY CHỌN] ... [-T] TARGET LINK_NAME (mẫu 1) hoặc: ln [TÙY CHỌN] ... TARGET ( Mẫu thứ 2) hoặc: ln [TÙY CHỌN] ... MỤC TIÊU ... TRỰC TIẾP (mẫu thứ 3) hoặc: ln [TÙY CHỌN] ... -t MỤC TIÊU TRỰC TIẾP ... (mẫu thứ 4) "Để giải quyết vấn đề này, tôi đã thêm" - t ./ "
adam.r

1
@ adam.r tôi đã viết ln -s ../meme/bin/* ., không phải ln -s ../meme/bin/*. Có vẻ như bạn đã bỏ lỡ một ký tự khi sao chép lệnh.
Gilles 'SO- ngừng trở nên xấu xa'
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.