Arasındaki fark nedir filename
ve ./filename
? Hangi şartlar altında biri diğerine tercih edilir?
Arasındaki fark nedir filename
ve ./filename
? Hangi şartlar altında biri diğerine tercih edilir?
Yanıtlar:
Veri dosyaları için bir fark yaratmaz - her iki ifade de geçerli dizininizdeki veri dosyasına başvurur. (Örneğin cat filename
ve cat ./filename
anlamsal olarak aynıdır.)
Söz konusu dosya adı bir yürütülebilir dosyaya işaret ediyorsa farklı bir hikaye , yani komut satırına yazdığınız ilk (hatta yalnızca) şeydir. ./filename
geçerli dizininizdeki yürütülebilir dosyayı arayacak ve başka hiçbir yerde bulunmayacaktır. filename
diğer yandan, ortam değişkenini değerlendirir ve burada depolanan her dizinde (geçerli dizininizi içerebilir veya içermeyebilir) PATH
arar filename
.
./filename
(veya başka herhangi bir /path/to/filename
), PATH'nizde bulunan ilk dosyayı değil, belirli bir yürütülebilir dosyayı yürütmek istediğinizde tercih edilir .
Eğer bir program filename
çalıştırıyorsanız, sizin için bulunan ilk programı çalıştırmanızı $PATH
, ikincisi ise geçerli dizinde çalıştırmayı söylüyor.
Bu dosya adını bir programda olduğu gibi bir argüman olarak kullanıyorsanız do_something filename
veya do_something ./filename
aynı şey anlamına gelir.
Komut uygulamasından bahsediyorsun, değil mi?
PATH
Noktalı virgülle ayrılmış bazı sistem dizinlerini içeren bir ortam değişkeni vardır. Eğer yazdığınızda command
onu bulursa amacıyla bu dizinlerde sistem görünüyor onlar adında çalıştırılabilir bir dosyayı bulmak için belirtilen <komut>, onu çalıştırmayı dener. PATH'inizi echo $PATH
bash üzerinden görebilirsiniz . Örneğin:
$ echo $ PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / oyunlar: / usr / local / sbin: / usr / local / bin: / home / ivanatora / bin: / usr / local / kde4 / bin: / usr / local / kde4 / bin
Eğer yazdığınızda ./filename
size tam yolu belirterek vardır: Geçerli dizini. Geçerli dizinin nadiren $ PATH değerinde olduğunu görebilirsiniz (güvenlik nedeniyle). Bu nedenle, geçerli dizinden bir dosya yürütmek istiyorsanız, kullanın ./filename
.
Bir dosyayı yoluna göre yürütmek için (özellikle $ PATH içinde değilse) şunları da yazabilirsiniz <path>/file
:
/ Sbin / ifconfig
Yürütülebilir güvenlik bu farkın ana nedenidir.
İstemiyorsun . (şu anki çalışma dizini veya PWD) yolunuzdadır, çünkü birisi http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 PWD'nizde ps veya ls gibi önemli bir yürütülebilir dosyayı trojan edip kötü veriler sunarak sizi kandırabilir.
Hangi koşulları kullandığınıza bağlıdır.
Bir argüman olarak, örneğin "program dosya adı", o zaman programa bağlıdır, ancak genellikle aynıdırlar.
Bir program adı olarak, örneğin "dosyaadı argümanları", ardından "dosyaadı argümanları" ikiliyi bulmak için PATH'yi arar, "./filename argümanları" ise geçerli dizindeki programı kullanır. Bu tabii ki yararlıdır. PATH'de değil, ancak bunu olsa bile kullanmak yararlıdır. belki de daha önceki bir girişle eşleştiği için yolda.