ile çalışan komut dosyası “. ”Ve“ kaynak ”ile


25
  1. Bir bash betiğini çalıştırmanın aşağıdaki iki yolunun eşdeğer olup olmadığını merak ediyordum.

    . ./myScript.sh
    
    source myScript.sh
  2. Her ikisi de komut dosyasını çalıştırmak yerine komut dosyasının içeriğini mi çalıştırıyor, yani komut dosyasını çalıştırmak için alt kabuk oluşturmuyor mu?

1
Hey, manpage'de!
alex

@ alex: lütfen bana göster? man ., man sourceya da henüz bilmediğim neyse.
Tim

2
Bkz type .vehelp .
rozcietrzewiacz

man $SHELL,/source
alex

4
. diğerlerine göre daha taşınabilir .
l0b0

Yanıtlar:


21
  1. Aynı şeyi yapmaları için bash'ta eşdeğerdirler. Öte yandan, source5 karakter daha uzun ve POSIX-sadece kabukları veya Bourne için taşınabilir değil, oysa .(nokta), bu yüzden kullanmayı hiç rahatsız etmedim source.

  2. Bu doğru - bir dosyayı almak komutları geçerli kabukta çalıştırır ve mevcut kabuk ortamınızı etkiler. Argümanları kaynak dosyaya aktarmaya devam edebilirsiniz ve $PATHeğik çizgi içermiyorsa, bash dosya adını normal bir komut gibi arayacaktır .


Asıl soru .vs ile ilgili değil source, ama örneğinde,

. ./myScript.sh 

aynı değil

source myScript.sh

çünkü .ve sourcefonksiyonel olarak aynıdır myScript.shve ./myScript.shaynı değildir. Yana ./myScript.shbir bölü, bir yol olarak yorumlanır ve adil kullanımları kabuk ediyor ./myScript.sh. Ancak, myScript.shbir eğik çizgi bulunmadığından kabuk $PATHönce onu arar. Bu POSIX için belirtilen standart davranıştır .. Çoğu kabuk, varsayılan olarak (yol aramasından sonra geçerli çalışma dizininde arama yapmak gibi) uzantılar ekleyebilir veya ./ ' nin davranışını değiştirmek için seçenekler ekleyebilir source.


2
Verilen dosya yolu içermeyen davranış /kabuk bağımlıdır ve bunun için bashve zshPOSIX modunun etkin olup olmamasına bağlıdır. Ayrıca birçok ksh uygulamasında, ondan .farklı davrandığını unutmayın source.
Stéphane Chazelas

@StephaneChazelas Evet, haklısın. Yukarıdaki açıklamanın POSIX standardında olduğunu açıklığa kavuşturmak için bir not ekledim.
jw013

8

Evet, eşdeğerdir. İşlevsel bir fark yoktur; .bu sadece bir builtin eş anlamlısıdır source.

(Düzenleme: Anlaşılan bunun için sadece doğrudur bashve zshbazı hafif kabuklar yok. sourceSadece, .bu yüzden POSIX tarafından belirtilen ksh, dash, ashvb olmayabilir sourcebakın. Jw013 yanıtını bilgi için.)


Teşekkürler! Ancak $ alias .çıktılar bash: alias: .: not found .
Tim

Her ikisi de yerleşik, yani takma ad da yerleşiktir. Bu belgelenmiştir , ancak sanırım 'eş anlamlı' bu durumda 'takma ad' değil, doğru terimdir.
Caleb
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.