Yanıtlar:
Her seferinde noktayı yazmadan bunu yapmanın bir yolu var mı? Örneğin betiğin kendisinden üst kabuk değiştirmeye yönelik bir komut mu?
Var olduğunu sanmıyorum (yazmanın dışında source somescript.sh
, ama muhtemelen aradığın şey bu değil ^^).
Komut dosyasını her zamanki gibi çalıştırırsanız, ./somescript.sh
kabuk bu komutu kullanır ve yürütür. Komutu çekirdeğe iletir ve ardından çekirdek, komutun #!
içindeki satırı ayrıştırıp bu komutun nasıl yürütüleceğine karar verir . Daha sonra çekirdek belirtilen tercümanı başlatır (bu durumda muhtemelen bir bash
alt kabuk). Bunun somescript.sh
için çevrede yapılan değişiklikler alt kabukta ana kabuğu etkilemeden izole edilir.
Kabuğun başka bir işlemi başlatmadan komut dosyasının kendisini okumasını istiyorsanız, açıkça .
veya source
anahtar sözcüğünü kullanarak söylemeniz gerekir .
alias
önerdiği gibi komutla bir alt kabuk oluşturmaması söylenebilir .
Yürütürseniz ./somescript.sh
harici bir program olarak, böyle bu çevrede bir yolu yoktur, vb geçerli dizin değişen değişkenlerini ayarlama, sigara ihraç değişkenleri erişme gibi, çalışan kabuk süreci içine bir şey yapamaz.
(Peki, tamam, alt işlemden bir hata ayıklayıcı çalıştırabilir ve ana işlemin belleğini çimdikleyebilirsiniz. Ancak denerseniz, en olası sonuç ana kabuğun çökmesidir.)
Koşman gerek . ./somescript.sh
. İsterseniz bir takma adın veya işlevin arkasına gizleyebilirsiniz, ancak yine takma adın veya işlev tanımının üst kabukta yapılması gerekir.
Sanırım çalıştırmaya çalıştığınız komut dosyası çalıştırılabilir değil. chmod a+x somescript.sh
Bu dosyaya kullanıcı, grup ve diğer (ugo) için yürütme bitini ekleyecektir. Dosyanın ilk satırında ayrıca #! üstündeki çizgi, gibi #!/bin/bash
.
ls -l somescript.sh
Dosya için rwx üçlüsünü (okuma / yazma / yürütme) gösterir. Dosyanın size ait olduğunu varsayarak en azından ilk sette bir x'e ihtiyaç duyacak.
export PATH=$PATH:/usr/local/bin
, $ PATH'inize / usr / local / bin öğesini eklemek istiyorsanız, çalışan ortam değişkenlerinizi değiştirmek için dosyayı kaynaklamanız gerekir. Bu soru gerçekten "Çalışan kabuktaki ortam değişkenlerimi bir bash betiğinden programlı olarak nasıl değiştiririm?" Betik . ./somescript.sh
gayet iyi çalışıyor - bir dosyaya kaynak sağlamak için dot komutunu kullanıyorsunuz. tcsh aynı şey için "kaynak" kullanır.
export PATH=$PATH:.
Bu komutu kabukta çalıştırmak veya kabuk yapılandırma dosyanıza eklemek, geçerli dizini PATH değişkenine ekler. PATH değişkeni, bir komut verdiğinizde kabuğunuzun çalıştırılacak ikili dosyaları arayacağı dizinlerin listesidir.
Bu, geçerli dizinde herhangi bir yürütülebilir dosyayı çalıştırmanıza izin vermez. ./
.
olmadığını soruyor ./
. ./Somescript'i çalıştırmak, geçerli kabuğunda olduğu . ./somescript
gibi çalıştırmaz.