Başlığın dediği gibi * NIX dosya sistemleri için herhangi bir fark var mı? örneğin ls filevels ./file
Başlığın dediği gibi * NIX dosya sistemleri için herhangi bir fark var mı? örneğin ls filevels ./file
Yanıtlar:
SmallLoanOf1M'nin açıklaması hakkında deli değilim. Teknik olarak doğrudur, ancak sorudaki kullanım örneğiyle eşleşmeyecek şekilde yanıt verir.
Örnek olarak, şu iki soru arasında önemli bir fark var: "dosya" ve "./file"
Dosya kabuk tarafından ayrıştırılan bir karakterle adlandırılırsa ne olur? Özellikle çalışan komutla yorumlanan karakterlerle ilgili.
Özellikle, "tire" karakteri: "-". Ancak diğer karakterler kabuk için anlamlıdır.
Misal. Dosyama "-dingle" adı verildi
Dosyayı listelemeye çalışın:
ls -dingle
# ls -dingle
ls: invalid option -- 'e'
Daha da kötüsü, dosya " -rf rmbomb *" olarak adlandırılmışsa ne olur ? Şimdi kaldırmayı deneyin
rm "-rf rmbomb *"
Bu örneği çalıştırmaya bile çalışmayacağım, ama umarım bu fikri anlarsınız.
Öyleyse tire ile bakan bir dosyayı nasıl listeliyorsunuz? ./Önde kullanın .
# ls ./-dingle
./-dingle
Aynen rm
ls \-dingleveya ls \-rf\ rmbomb\ \*. Bu, herhangi bir komut kümesinin en azından tutarlı olmasını sağlamak için iyi bir yol olabilir, çünkü ./bir adın ./.
rm "-rf rmbomb *"Sadece rmbir hata yapmak yerine, kötü bir şey yapar gibi geliyor . Yalnızca dosya adını belirtmeyi unutursanız tehlikelidir, bu nedenle kelime bölme gerçekleşir. (özellikle rm $filebunun yerine çalıştırdığınız bir kabuk komut dosyasında rm "$file". Ancak bu durumda *genişlemeyecektir, çünkü değişken genişlemenin içeriğinde glob genişlemesi gerçekleşmez. İsterseniz, bir gerekir eval.) Her neyse, betiğiniz word-rm'e geçmeden önce dosya adlarını bölerse, adlı bir dosya space -rf .veya başka bir şey yaparım , bu yüzden rm ./$iyardımcı olmaz.
rm: invalid option -- ' 'için alanı -rftek karakterli bir anahtar olarak yorumlamaya çalıştığı andan itibaren . (Ve evet, bir şeyi gözden kaçırmış olsaydım boş bir dizinin içinde çalıştırdım ve aslında tehlikeliydi: P)
IFS=''ve tarafından bastırılmadığı sürece, -fsıralanmamış değişken genişletme ve komut ikamesi sonuçlarında YAPILIR . Daha nadir bir örnek, awkbir işleneni (komut dosyası olan ilk işlenenden başka) formun foo=baryürütülecek bir atama olarak, ancak ./foo=barokunacak bir dosya olarak ele almasıdır.
Evet.
Düzenlenmek suretiyle filekomut satırında, BASH bu isimde bir dosya için sizin $ PATH ortam değişkeni arayacaktır. Dosya $ PATH değişkeniniz içindeki bir dizinde bulunmadıkça, dosya bulunmaz.
.geçerli dizin anlamına gelir. içindeki./ anlamına gelir nisbi anlamda geçerli dizinde. /home/sheogorath/shivering/isles.imgDizinde ./isles.imgçalışırken çağrılırken olduğu gibi bir şey söylemenin karşılığıdır /home/sheogorath/shivering/.
Bu nedenle, çalışma dizininizdeki dosyaları "yerinde" yürütmek için yaygın olarak kullanılır.
EDIT:
Örneğin, lskabuk tarafından çağrılıyor ve path değişkeni kullanılarak bulundu. Argümanı, ne olursa olsun, çalışma dizininizde işlenecektir. Bunun için varsayılan olduğu için ls, belirtme arasında herhangi bir fark görmezsiniz.file./file her ikisi de geçerli dizininizi gösterdiğinden, ve açıkça belirtmek .
Tüm komutlar, çalışma dizinindeki dosya yollarını kabul etmez ve bazıları yapılandırma yoluyla önceden tanımladıkları bir dizindeki dosyaları belirtmenizi bekler. Dosyaları bağımsız değişken olarak kabul eden komutlar arasında, bu komutlar daha az yaygındır
lsorijinal soruda belirtildiği gibi bir komutu izleyen dosya adı bağımsız değişkenleriyle ilgisi yoktur . Bu, göreceli bir yolu (geçerli çalışma dizinine göre) yeniden ifade ../../dir/filenameetme ile mutlak bir yol arasındaki /path/to/dir/filename
lsher zaman aynı yol olacaklardır, biri diğerinden daha açık bir şekilde belirtilmiştir. Bağımsız değişkenleri işlerken tüm komutlar bu şekilde davranmaz, ancak çoğu komut iş görür.