Kaynak vs. neden farklı davranış?


17

Geçenlerde öğrendim,

. ./.a.ave ./.a.aaynı.

Ancak denemek source source .a.ahata veriyor. IMO, .Bash takma adı olmak sourcefarklı davranmamalı, o zaman ne eksik?

Bonus, neden . .Tamam iken source sourcedeğil?


8
Örneğiniz için daha net bir isim seçmiş olabilirsiniz :). Her durumda, her ne çıkardın bunu . scriptve ./scriptaynı şeydir? Kesinlikle değildir . Ayrıca, .bir takma ad değildir source. Öteki yol bu. .standarttır ve sourcebir takma ..
terdon

2
Kabuk betiklerine bakarak biraz zaman geçirdikten sonra, .komuta alışmış olursunuz , ama demek istediğim sourcedaha iyi bir komut, source somefilebir komut dosyasında gördüğünüzde , bu ifadenin ne yaptığını hemen biliyorsunuz, ancak . somefile ne yaptığı belli değil, . karakteri kolayca tamamen
özleyebilirsiniz

Bonus, neden. . Kaynak kaynak olmasa da tamam mı? - hata mesajı ne kadar içinde bash: .: .: is a directoryüzerinde . .açıklanması Tamam ihtiyacı var.
karşı

@terdon - kesinlikle doğru. Orijinal örnek . ./.a.a .dürüst olmaktı. : -Eğer tür sınav, eğer yaparsan. :-) Bağlantılı soru harika, çok teşekkürler. Bana bu fikri veren şey: dosyaları bu şekilde yürütürken hiçbir fark görmemiş olmam ve .bir yerde okuduğum gerçeği takma isim source. :-)
LAFK, Reinstate Monica'ya

Yanıtlar:


27

Sadece yerini alamaz .ile sourceher yerde; Eğer

. ./.a.a

çalışır, ilkini değiştirebilirsiniz .(en azından Bash'de):

source ./.a.a

İkinci .Eğer o yerini alamaz, geçerli dizin temsil source(özellikle değil ./ile sourceyaptığın gibi).

source source

sourcegeçerli dizinde çağrılan ve geçerli kabuğunuz için anlamlı bir şey içeren bir dosyanız varsa Tamam olur . Nasıl iyi . .olacağını göremiyorum ...

Ayrıca . ./.a.ave ./.a.aaynı değil, ikinci form .a.aayrı bir kabukta çalışır . Bkz . Sourcing ('.' Veya 'source') ile bash'de dosya yürütme arasındaki fark nedir? detaylar için.


9

sourceşu şekilde kullanılması gereken bir kabuk anahtar kelimesidir: sourcefileburada filegeçerli kabuk komutları içerir. Bu kabuk komutları, komut satırından yazılmış gibi geçerli kabukta yürütülür. Şimdi, .fileaynısını yapıyor.

Bunun ötesinde, (" bu dizinde") veya (ile aynı ) ."geçerli çalışma dizini" anlamına gelir ../xyzxyza/b/./c/./da/b/c/d

Bunun ötesinde .bir dosya adında sadece .foobar"gizli" bir dosyayı (gerçekte değil) gösteren ya da foobar.pdfsonekiyle (burada .pdf) bir dosya biçimini belirten bir kural vardır .

Bu farklı anlamlar birbirinin yerine kullanılamaz.


8
.hiçbir şekilde modası geçmiş değildir. Bunun aksine source, bir dosyanın kaynaklanmasının taşınabilir, POSIX tanımlı yoludur. sourceDiğer adı kabuk özeldir ve (örneğin, ya mevcut değildir olabilir dash) ya da bir standart farklı davranır ..
terdon

Teşekkürler @terdon, Wiki , komutun ilk göründüğü C kabuğunda bir nokta (.) Olarak kaynağın kabul edilemez olduğunu söylüyor.
Noam Manos

1
@NoamManos belki, ama C-kabuğu POSIX değildir, bu yüzden çok farklı davranabilir (ve yapar).
terdon
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.