$ 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
$PATHtehlikelidir, 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).
~/binveya ~/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 libiçin, kütüphaneler dociç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/binve /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, binverilen 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ı stowprogram (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, $PATHiçeriğiniz /usr/local/bin(büyük olasılıkla yaparsa), bu klasör, rubyyakut 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.