source
ve .
'un aynı şeyi yaptıklarını biliyorum ve başlıktaki diğer komut çiftlerinin aynı şeyi yapıp yapmadığını öğrenmeye şaşırdım (çünkü kabuğum gibi bash çalıştırıyorum, $SHELL [script]
ve bash [script]
eşdeğer, doğru mu?).
Komut dosyası yürütme üç yöntemi arasındaki fark nedir? Soruyorum çünkü yeni bir betiğin kaynaklanmasının, onu yürütmek için NOT the exact same olduğunu öğrendim. "Deneylerimi" yürütmekten ve adam sayfalarını okumaktan apaçık görmediğim bir şekilde.
Bu işlevleri, yazdığım inanılmaz derecede basit komut dosyalarına körü körüne çağırarak bulamadığım diğer ince farklılıklar nelerdir? Yukarıdaki bağlantılı cevabı okuduktan sonra, sorumun cevabının oldukça basit bir açıklama olacağını, ancak neredeyse hiç bir zaman tam olarak keşfedemeyeceğimi tahmin edebilirim.
İşte benim yaptığım "deney" var:
$. myScript.sh
"This is the output to my script. I'd like to think it's original."
$source myScript.sh
"This is the output to my script. I'd like to think it's original."
$bash myScript.sh
"This is the output to my script. I'd like to think it's original."
$$SHELL myScript.sh
"This is the output to my script. I'd like to think it's original."
$./myScript.sh
"This is the output to my script. I'd like to think it's original."
$myScript.sh
"This is the output to my script. I'd like to think it's original."
Ahh, teşekkürler! Bu yüzden farklı bir kabuk (dş, csh) ve STILL [bash [script]] çağrısı yapıyor olabilirim. Shebang hakkında eklenen bölüm ilginçti! Yani "$ SHELL [script]" de shebangs göz ardı edecek. Daha önce farkettiğim bir başka şey de, deneylerimi yürütürken girdiğim dizinin $ PATH değişkenimde olmasıydı. Eğer olmasaydı, "[script]" sadece işe yaramazdı. Vay.Benzer benzer bir çıktı için bir ton fark var. –
@AriSweedler: Bu doğru. Bazı araçların * geçerli kabuğunuzu * göz ardı ettiğini ve * açıkça * aksi belirtilmedikçe (örneğin crontab ve make) varsayılan olarak '/ bin/sh' için varsayılan değer olduğunu unutmayın. – DevSolar
Açıklamalar: kaynak "Bashism", "." POSIX; '$ SHELL', kabuğunuzdan başka bir şeye genişleyebilir (örneğin, tire çalıştırırken '/ bin/bash' gibi). –