Pertanyaan Apa itu "$ PATH" dan "~ / bin"? Bagaimana saya bisa memiliki skrip pribadi?


apa yang $PATH?

Bagaimana saya bisa memiliki perintah / program yang hanya tersedia untuk saya?
Saya telah melihat jalan ini ~/bin disebutkan sebelumnya, tetapi apa yang digunakan untuk itu, dan bagaimana cara menggunakannya?


29
2017-10-27 22:58


asal


Saya agak bereksperimen karena ini lebih FAQ atau materi wiki dari "pertanyaan nyata". Itu diminta karena saya menyebutkan ~ / bin pada jawaban sebelumnya (di sidebar yang terhubung ke kanan) dan seseorang berkomentar tentang cara menambahkannya ke PATH: sekarang daripada komentar singkat, kita dapat menautkan ke posting ini ketika ~ / bin adalah tersebut.


Jawaban:


$ PATH adalah variabel lingkungan yang digunakan untuk perintah pencarian. The ~ adalah direktori home Anda, jadi ~ / bin akan menjadi / home / user / bin; ini adalah direktori normal.

Ketika Anda menjalankan "ls" di shell, misalnya, Anda benar-benar menjalankan program / bin / ls; lokasi yang tepat dapat berbeda tergantung pada konfigurasi sistem Anda. Ini terjadi karena / bin ada di $ PATH Anda.

Untuk melihat jalur dan menemukan di mana perintah tertentu berada:

$ 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  ...

Untuk memiliki direktori bin pribadi Anda, Anda hanya perlu menambahkannya ke jalur. Lakukan ini dengan mengedit ~ / .profile (file tersembunyi) untuk menyertakan baris di bawah ini. Jika barisnya dikomentari, Anda hanya perlu menghapus tanda komentar; jika mereka sudah ada di sana, Anda sudah siap!

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

Sekarang Anda perlu membuat direktori ~ / bin dan, karena .profile dijalankan saat login dan hanya menambahkan ~ / bin jika ada pada waktu itu, Anda harus login lagi untuk melihat PATH yang diperbarui.

Mari kita coba:

$ 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  ...

25
2017-10-27 22:58



Satu hal yang harus diwaspadai ketika menggunakannya adalah bahwa ia hanya akan menemukan perintah yang merupakan binari dalam sistem berkas, ia tidak melaporkan shell builtin, alias, atau fungsi. Seringkali, itu lebih berguna untuk digunakan type untuk melihat bagaimana sebuah perintah yang sebenarnya akan diselesaikan oleh shell; misalnya.: which echo dan type echo akan melaporkan hal yang berbeda, which mengembalikan '/ bin / echo' tetapi 'type' mengembalikan bahwa itu adalah shell builtin, yang lebih disukai shell daripada file di '/ bin'. - Steve Beattie
@Steve Beattie, +1. which lebih baik diganti dengan type atau command dalam shell interaktif, dan itu benar-benar tidak berguna dalam skrip. - geirha
Satu hal yang perlu diperhatikan yang baru saja saya perhatikan - $HOME variabel dalam $PATH untuk beberapa alasan tidak berhasil, saya harus menggunakannya ~ tanda tangan saja. - Hi-Angel


Mengenai ~/bin dan perintah / program hanya tersedia untuk pengguna Anda

Versi Ubuntu terbaru termasuk ~/bin direktori di Anda $PATH, tetapi hanya jika ~/bin direktori ada.

Jika tidak ada:

  1. Pastikan bahwa Anda ~/.profile berisi bait berikut (standarnya ~/.profile sudah melakukannya):

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

    mkdir -p ~/bin
    
  3. Boot ulang komputer Anda, atau paksa bash untuk dibaca ulang ~/.profile:

    exec -l bash
    

17
2018-01-25 11:09



Terima kasih atas "reboot atau exec -l bash"tip. Apa yang dimaksud dengan -l bendera lakukan? Saya tidak menemukan penjelasan man exec. - evanrmurphy
exec -l akan mengeksekusi bash sebagai shell login [wiki.bash-hackers.org/commands/builtin/exec]. Singkatnya, itu memaksa bash untuk dibaca ulang /etc/profile dan ~/.profile. Baru saja berlari exec bash hanya akan dibaca ulang ~/.bashrc. - Danilo Piazzalunga