“$ PATH” ve “~ / bin” nedir? Kişisel senaryoları nasıl alabilirim?


29

Nedir $PATH?

Sadece benim için uygun olan komutları / programları nasıl alabilirim?
Bu yolu ~/bindaha önce bahsetmiştim, ama ne için kullanılıyor ve nasıl kullanırım?


Biraz denemeliyim çünkü bu "gerçek bir soru" dan ziyade SSS veya wiki materyali. Önceki bir cevapta ~ / bin'den (sağdaki bağlantılı kenar çubuğunda) bahsettiğimden ve birisi PATH'a nasıl ekleneceğine dair yorum yaptığım için istendi: kısa yorumlar yerine şimdi ~ / bin bahsettiniz.

Yanıtlar:


26

$ PATH, komutları aramak için kullanılan bir ortam değişkenidir. ~, Ana dizininizdir, yani ~ / bin / home / user / bin; bu normal bir dizindir.

Örneğin, bir kabuktaki "ls" yi çalıştırdığınızda, aslında / bin / ls programını çalıştırıyorsunuz; tam konum sistem yapılandırmanıza bağlı olarak değişebilir. Bu, çünkü / bin $ PATH'nizde.

Yolu görmek ve herhangi bir komutun nerede olduğunu bulmak için:

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

Kendi özel bin dizininizin olması için onu sadece yola eklemeniz gerekir. Bunu, aşağıdaki satırları içerecek şekilde ~ / .profile (gizli bir dosya) düzenleyerek yapın. Çizgiler yorumlanırsa, yalnızca bunlardan rahatsız olmanız gerekir; eğer zaten oradalarsa, hepiniz hazırsınız!

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

Şimdi ~ / bin dizininizi yaratmanız gerekir ve çünkü .profile oturum açma sırasında çalıştırılır ve sadece o zaman varsa ~ / bin ekler, güncellenmiş PATH'i görmek için tekrar giriş yapmanız gerekir.

Hadi deneyelim:

$ 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
Kullanırken dikkat edilmesi gereken bir şey, dosya sisteminde sadece ikili dosyalar olan komutları bulacağı, kabuk yerleşimi, takma adları veya işlevleri bildirmediğidir. Genellikle, typegerçek bir komutun kabuk tarafından nasıl çözüleceğini görmek için kullanmak daha kullanışlıdır ; örneğin: which echove type echofarklı şeyler rapor eder, which'/ bin / echo' döndürür, ancak 'type', kabuğun '/ bin' içindeki dosyaya göre tercih edeceği bir kabuk yerleşimi olduğunu döndürür.
Steve Beattie

@ Steve Beattie, +1. etkileşimli mermilerle veya etkileşimli mermilerle whichdaha iyi durumdadır ve senaryolarda tamamen işe yaramaz. typecommand
geirha

Dikkatimi çektiğim bir şey var - nedense $HOMEdeğişken $PATHişe yaramıyor, yani ~bunun yerine işaret kullanmak zorunda .
Hi-Angel

19

İlgili ~/binve yalnızca kullanıcı tarafından kullanılabilen komutlar / programlar hakkında

Son Ubuntu sürümleri, içindeki ~/bindizini içerir $PATH, ancak yalnızca ~/bindizin varsa.

Eğer yoksa:

  1. ~/.profileTelefonunuzun aşağıdaki stanza içerdiğinden emin olun (varsayılan ayar ~/.profilezaten var):

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

    mkdir -p ~/bin
    
  3. Bilgisayarınızı yeniden başlatın veya bash'ı yeniden okumaya zorlayın ~/.profile:

    exec -l bash
    

"Yeniden başlat exec -l bash" ya da "bahşiş " için teşekkürler . -lBayrak ne yapar ? Bir açıklama bulamıyorum man exec.
evanrmurphy

3
exec -lbash'ı giriş kabuğu olarak yürütür [ wiki.bash-hackers.org/commands/builtin/exec] . Kısacası, hiç bash zorlamak yeniden okumak /etc/profileve ~/.profile. Sadece koşmak exec bashsadece tekrar okuyacak ~/.bashrc.
Danilo Piazzalunga 19:13
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.