$ PATH içine bir dizin eklerken, alt dizinleri yinelemeli olarak eklenmedi. Bunu yapabilir miyim? Yoksa bunun desteklenmemesinin bir nedeni var mı?
$ PATH içine bir dizin eklerken, alt dizinleri yinelemeli olarak eklenmedi. Bunu yapabilir miyim? Yoksa bunun desteklenmemesinin bir nedeni var mı?
Yanıtlar:
Bunları benzer şekilde kullanarak özyinelemeli olarak ekleyin:
PATH=$PATH$( find $HOME/scripts/ -type d -printf ":%p" )
UYARI: Bu soruya yapılan yorumlarda belirtildiği gibi, bu bir güvenlik riski oluşturduğu için teşvik edilmez çünkü eklenen dizinlerdeki yürütülebilir dosyaların zararlı olmadığının garantisi yoktur.
Gilles'un cevabını takip etmek ve stow'u kullanmak muhtemelen daha iyi bir çözüm
$PATH
tehlikelidir, ancak alt dizinler eklemek çok daha kötü değildir. Ama bu genellikle işe yaramaz ve muhtemelen yetersizdir (ve bazen sizi ortam büyüklüğü sınırlarına bile atabilir).
~/bin
veya ~/scripts
), böylece güvenlikleri aynı olur.
~/scripts
. Ben ve kimsenin de yapmamasına gerek yok
Her zamanki unix dizin yapısı, dizinlere göre dizilere ayrılmış uygulama dosyalarına sahiptir: bin
çalıştırılabilir dosyalar lib
için, kütüphaneler doc
için, dokümantasyon için vb. O zaman ayrı dizinlere kurulurlar; genellikle uygulamalar birkaç dizinleri (dolayısıyla birçok sistemler sadece üç dizinleri sahip halinde gruplandırılır $PATH
: /usr/local/bin
, /usr/bin
ve /bin
). Bir dizinde hem çalıştırılabilir dosyaların hem de alt dizinlerin bulunması nadirdir, bu nedenle bir yönetmenin alt dizinlerini içine almak için talep yoktur $PATH
.
Zaman zaman yararlı olabilecek, bin
verilen bir dizinin tüm alt dizinlerini aşağıdakilere eklemektir $PATH
:
for d in /opt/*/bin; do PATH="$PATH:$d"; done
Ancak, bu nadiren yapılır. Standart olmayan dizinlerde bulunan çalıştırılabilir dosyaların bulunacağı zamanki yöntem $PATH
, yoldaki bir dizinde sembolik bağlantılar kurmaktır /usr/local/bin
. Yardımcı stow
program (veya xstow
) bu konuda faydalı olabilir.
Bunun desteklenmemesinin bir nedeni, bin / (ve benzeri) dizinlerin, programlar için gerçek yürütülebilir dosyaların yüklü olduğu belirli dizinleri işaret etmek için sembolik bağlar kullanmasıdır.
Bu nedenle, $PATH
içeriğiniz /usr/local/bin
(büyük olasılıkla yaparsa), bu klasör, ruby
yakut kodunu çalıştıran kodun bulunduğu dizine işaret eden (benzeri ) sembolik bağlarla (gibi ) doludur ../Cellar/ruby/2.1.3/bin/ruby
.
Bu nedenle, her çalıştırılabilir klasörü kendi klasörünüzde belirtmek zorunda değilsiniz $PATH
; normalde bin / type dizinlerinde bulunan sembolik linkler sizin için bunu idare eder.