Bir dizinin tüm alt dizinlerini $ PATH olarak nasıl ayarlayabilirim?


38

$ PATH içine bir dizin eklerken, alt dizinleri yinelemeli olarak eklenmedi. Bunu yapabilir miyim? Yoksa bunun desteklenmemesinin bir nedeni var mı?


5
Neden dünyaya ihtiyacın var?
alex,

10
@alex: Neden ihtiyaç olmadığını düşünüyorsunuz?
Tim,

4
@ "Genel olarak" desteklenmemesinin nedeni bir güvenlik riskidir ve genellikle gerekli değildir. Yolunuza, neyin içinde sıkışıp kalabileceğini bilen kişileri yinelemeli olarak eklerseniz ... denetlenmesi zorlaşır.
xenoterracide

4
@Tim: İstemek gerçekten şaşırtıcı ve sıra dışı bir şey, bu yüzden.
alex,

8
@alex, bin dizinindeki alt dizinler için ne yapmalı? bin klasöründeki dizinlerdeki komut dosyalarını düzenlemeyi çok isterim.
Andy,

Yanıtlar:


19

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


6
Uyarı: Bu cevap teknik olarak doğrudur, ancak alex ve xenoterracide notuna göre, bu çılgınca güvensiz bir şeydir ve bunu gerçekten kullanmadan önce iki kez düşünmelisiniz.
Caleb

2
Lütfen bunun pratikte yapılacak neden iyi ve güvenli bir şey olmadığı konusundaki cevabınıza bir uyarı ekleyin.
Caleb

3
Özellikle tehlikeli olduğunu düşünmezdim ; rastgele dizinler eklemek $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).
Gilles 'SO- kötülük' stop '

3
@Caleb: belki delilik, ama neden güvensiz? Birisi alt dizinlere kötü amaçlı çalıştırılabilir dosyalar ekleme erişimine sahipse, onları üst dizine de ekleyebilir (yani ~/binveya ~/scripts), böylece güvenlikleri aynı olur.
MestreLion

2
Rasgele kişilerin bilgisayarınıza kötü amaçlı dosyalar ekleyebileceği bir ortamda çalışıyorsanız güvenlik riski ~/scripts. Ben ve kimsenin de yapmamasına gerek yok
oseiskar

21

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.


4

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.

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.