Bash, her zaman yolun bir parçası olarak $ PWD'yi kontrol et?


15

Arka plan: Linux arka planından gelmeyen meslektaşlarımdan biri bana ./başkalarından değil, bazı komutlardan önce kullanmayı sordu , bu yüzden ona nasıl olduğunu açıkladımPATH çalıştığını ve ikili dosyaların nasıl çalıştırılacağını açıkladım. Onun yanıtı aptal olduğu ve sadece ./komutlardan önce yazmak zorunda kalmamasıydı .

Soru: Kabuğun davranışını $PWDher zaman ilk öğe olacak şekilde kolayca değiştirmenin bir yolu var mı PATH?


Aptalca olabilir (veya olmayabilir), ancak her ortamda tuhaflıklar var ve bu tipik bir Unix kabuk tuhaflığı.
RonJohn

12
Bu bir güvenlik önlemi. kabuklar kullanılan varsayılan olarak bunu yapmak (1970'ler düşünüyorum) ve çok kullanıcılı sistemler yaygın bunun hesabına saldırıya uğradı.
Charles Duffy

3
Cevabı aptalca bir şeydi : meslektaşının bu konuda kendi kendini eğitmesi gerektiğini söyledi. Bu kelepçesiz cevap PHB tarzı bir tepki gösterir : altta yatan sistemi anlama veya takdir etme.
Bulut

2
Neden sadece ikili dosyaları bırakıp bir ~/binparçası yapmıyorsunuz PATH? Bu da işleri düzenli tutar.
Sergiy Kolodyazhnyy

3
@Ziazis, Windows'da, geçerli dizinin parçası olup olmadığına bakılmaksızın PATH(bu tür düşüncelerin olağan kaynağıdır) dikkate alınır.
Stephen Kitt

Yanıtlar:


55

Gerçekten yapmak istiyorsanız, bunu yolunuza ekleyerek yapabilirsiniz .:

export PATH=".:$PATH"

Ancak, bu kötü bir fikirdir, çünkü kabuğunuz geçerli dizindeki herhangi bir komutu başkalarına göre seçecektir. Birisi (veya bazı program) lssık kullandığınız bir dizinde kötü amaçlı bir komut bırakırsa, sorun yaşarsınız ...


13
Bu mükemmel bir noktadır, ancak belki de hareket etmek yeterli olacaktır. yolun sonuna PATH = "$ PATH :." dosyasını dışa aktarın.
Christophe

12
Aslında , normal kullanıcılar için varsayılanın .başında olduğunuzu hatırlıyorum PATH(kullanıcıyı HP-UX üzerinde "sam" ile oluşturduysam, en azından eski SunOS'tan emin değilim). Daha sonra bu varsayılan güvenlik nedeniyle kaldırıldı. Eğer .son öğeniz varsa PATH, yine de biri tipik yazım hataları için umut edebilir.
Philippos

6
@Philippos, evet /tmp/sl, bu gibi PATH'leri olan kullanıcıları hedefleyen rezil şaka komut dosyaları gibi. Debian ve türevleri üzerinde yüklemek slyazdığınız ne sıklıkta bir fikir edinmek için paket slyerine ls.
Stéphane Chazelas

Hayır, bu kötü bir fikir değil, iyi bir fikir, özellikle de geliştiriciyseniz. Tabii ki, kimsenin kötü niyetli komutlara düşmediği bir ortam tutmak iyi bir fikirdir.
jamesqf

4
@jamesqf, aslında, ./geçerli dizindeki komutları ne zaman çağırmak istediğinizi yazmak iyi bir fikirdir . Ya da, her zamanki geçerli dizin ise /project/under/development/bin, o zaman eklemek o adresinden Müşteri PATH. Bu, geliştirici kullanım durumunuzu çözer. Koyarak ., aramalarınızdan başında PATHkötü bir fikir, nokta.
Joker

14

Bu, sorunuza doğrudan bir cevap olmasa da, en iyi uygulama bin, ana dizininizde şu şekilde bir dizin oluşturmak olacaktır /home/user/bin:

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

Kişisel senaryolarınızı buraya koyun. Bu PATH, tanımladığınız sırayla geçilir ve kişisel komut dosyalarınızı gerek kalmadan yürütür ..


0

Sahip olmanız gerekir. PATH değişkeninizin başında:

export PATH=".:$PATH"
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.