Những gì $ đô la và tôn ~ Làm thế nào tôi có thể có kịch bản cá nhân?


29

$PATH

Làm thế nào tôi có thể có các lệnh / chương trình chỉ dành cho tôi?
Tôi đã thấy con đường này ~/binđược đề cập trước đây, nhưng nó được sử dụng để làm gì và làm thế nào để tôi sử dụng nó?


Tôi hơi thử nghiệm vì đây là tài liệu FAQ hoặc wiki nhiều hơn là "câu hỏi thực sự". Nó được nhắc vì tôi đã đề cập ~ / bin trong câu trả lời trước đó (trong thanh bên được liên kết ở bên phải) và ai đó đã nhận xét về cách thêm nó vào PATH: bây giờ thay vì nhận xét ngắn gọn, chúng tôi có thể liên kết với bài đăng này khi ~ / bin đề cập.

Câu trả lời:


26

$ PATH là một biến môi trường được sử dụng để tra cứu các lệnh. ~ Là thư mục chính của bạn, vì vậy ~ / bin sẽ là / home / user / bin; nó là một thư mục bình thường

Ví dụ, khi bạn chạy "ls" trong trình bao, bạn thực sự chạy chương trình / bin / ls; vị trí chính xác có thể khác nhau tùy thuộc vào cấu hình hệ thống của bạn. Điều này xảy ra bởi vì / bin nằm trong $ PATH của bạn.

Để xem đường dẫn và tìm vị trí của bất kỳ lệnh cụ thể nào:

$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:...
$ which ls     # searches $PATH for an executable named "ls"
/bin/ls
$ ls           # runs /bin/ls
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ /bin/ls      # can also run directly
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

Để có thư mục bin riêng của bạn, bạn chỉ cần thêm nó vào đường dẫn. Thực hiện việc này bằng cách chỉnh sửa ~ / .profile (một tệp ẩn) để bao gồm các dòng dưới đây. Nếu các dòng được nhận xét, bạn chỉ phải bỏ ghi chú chúng; nếu họ đã ở đó, bạn đã sẵn sàng!

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
  PATH="$HOME/bin:$PATH"
fi

Bây giờ bạn cần tạo thư mục ~ / bin của mình và, vì .profile được chạy khi đăng nhập và chỉ thêm ~ / bin nếu nó tồn tại vào thời điểm đó, bạn cần phải đăng nhập lại để xem PATH được cập nhật.

Hãy thử nghiệm xem:

$ ln -s $(which ls) ~/bin/my-ls   # symlink
$ which my-ls
/home/user/bin/my-ls
$ my-ls -l ~/bin/my-ls
lrwxrwxrwx 1 user user 7 2010-10-27 18:56 my-ls -> /bin/ls
$ my-ls          # lookup through $PATH
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...
$ ~/bin/my-ls    # doesn't use $PATH to lookup
bin  desktop  documents  downloads  examples.desktop  music  pictures  ...

3
Một điều cần chú ý khi sử dụng đó là nó sẽ chỉ tìm thấy các lệnh là nhị phân trong hệ thống tệp, nó không báo cáo shellin, bí danh hoặc hàm. Thông thường, sẽ hữu ích hơn khi sử dụng typeđể xem cách một lệnh thực tế sẽ được giải quyết bằng shell; ví dụ: which echotype echosẽ báo cáo những thứ khác nhau, whichtrả về '/ bin / echo' nhưng 'type' trả về rằng đó là một phần tử dựng sẵn, mà shell sẽ thích hơn tệp trong '/ bin'.
Steve Beattie

@Steve Beattie, +1. whichđược thay thế tốt hơn bằng typehoặc commandtrong các vỏ tương tác, và nó hoàn toàn vô dụng trong các tập lệnh.
geirha

Một điều cần lưu ý mà tôi vừa nhận thấy - $HOMEbiến trong $PATHmột số lý do không hoạt động, tức là người ta phải sử dụng ~dấu thay thế.
Hi-Angel

19

Liên quan ~/binvà các lệnh / chương trình chỉ có sẵn cho người dùng của bạn

Các phiên bản Ubuntu gần đây bao gồm ~/binthư mục trong của bạn $PATH, nhưng chỉ khi ~/binthư mục tồn tại.

Nếu nó không tồn tại:

  1. Đảm bảo rằng bạn ~/.profilecó chứa khổ thơ sau (mặc định ~/.profileđã có):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    
  2. Tạo ~/binthư mục:

    mkdir -p ~/bin
    
  3. Khởi động lại máy tính của bạn hoặc buộc bash đọc lại ~/.profile:

    exec -l bash
    

Cảm ơn về exec -l bashmẹo "khởi động lại hoặc ". Không những gì -lcờ làm gì? Tôi không tìm thấy một lời giải thích trong man exec.
evanrmurphy

3
exec -lsẽ thực thi bash dưới dạng shell đăng nhập [ wiki.bash-hackers.org/commands/builtin/exec] . Nói tóm lại, nó buộc bash phải đọc lại /etc/profile~/.profile. Chỉ cần chạy exec bashsẽ chỉ đọc lại ~/.bashrc.
Danilo Piazzalunga
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.