Sisteminizdeki kabuğun basit bir şekilde çağrılması, tanımlanmış olan takma adı (veya işlevi) miras almaz module
, bu nedenle kabuk onu bulamaz (alıntılarla birlikte notun altına bakın). Şu anda type module
nasıl module
tanımlandığını görmek için bilgi isteminden deneyin .
Temelde kaynak ile komut dosyasının her satırını klavyeden yazarsanız gibidir.
Bir tarafta geçerli kabuğun tüm geçmişini miras aldığınızı, ancak diğer tarafta geçerli kabuğun komut dosyanızın ve module
çağrınızın tüm taraflarının etkisine maruz kalacağını unutmayın .
Hakkında bir senaryo kaynak ve çalıştırmak için arasındaki farklar Eğer SuperUser okuyabilirsiniz Eyl 2009 veya Ara 2009 , Ubuntu Şubat 2011 , Unix Ağustos 2011 , Stackoverflow Aralık 2012 veya birçok başka yerlerde.
Bu bağlamda Modulefiles bölümünde bir uyarı var :
... Bir modülün boşaltılması sırasında ortam değişkenleri ayarlanmamıştır. Böylece, bir modül yüklemek ve sonra ortam değişkenleri önceki durumlarına dönmeden boşaltmak mümkündür .
Bu yüzden bunu bir senaryoda yürütmek daha akıllıca görünüyor .
İkincisini başarmak için düşünebilirim:
Bir kullanmak için etkileşimli kabuk , mevcut kabuğun belirli geçmişini ihmal değiştirerek, shebang senaryonuzun ile
#!/bin/bash -i
Etkileşimli kabuk, kullanıcı girişindeki komutları tty'de okur. Diğer şeylerin yanı sıra, böyle bir kabuk etkinleştirme sırasında başlangıç dosyalarını okur, bir istem görüntüler ve varsayılan olarak iş kontrolünü etkinleştirir ...
Bunun yerine mevcut kabuğun belirli bir hikayesini miras almayı tercih ederseniz, onu kaynaklamayı deneyebilirsiniz ... ancak bir alt kabukta
( source runit.sh )
Mevcut takma / fonksiyon bulmaya çalışın module
ile type module
daha sonra sonucu Senaryonu değiştirin. Bazı ortam değişkenleri için ayarlanamayacağını unutmayın module
.
İsterseniz, başlatma komut dosyalarını dizinde bulabilirsiniz $MODULESHOME/init/<shell>
.
Yorum Modüllerin Soru ve Cevaplarında
hatırlandığı gibi
Bir alt işlem (komut dosyası), üst işlem ortamını değiştiremez. Bir komut dosyasındaki modül yükü yalnızca komut dosyasının ortamını etkiler. Bir betiğin mevcut ortamı değiştirebilmesinin tek yolu, onu geçerli sürece okuyan betiği kaynaklamaktır.
Bu nedenle, mevcut ortamı değiştirmek istemiyorsanız, shebang'ı (1) değiştirmeye veya komut dosyasını bir alt kabukta (2) kaynaklamaya çalışmanın daha iyi olduğunu düşünüyorum . Vakanın kullanılabilirliğinden tam olarak emin değilim (3).
Not Modüllerin
manuel ve açıklama sayfalarından alıntılar
module
Modüller paketinin kullanıcı arayüzüdür. Diğer module
ad veya işlevmodulecmd
programı yürütür ve kabuğun komutun çıktısını değerlendirmesini sağlar. İlk argüman modulecmd
kabuk türünü belirtir.
Modüller paketi ve module
komut , kabuğa özel bir kabuk başlatma komut dosyası kaynaklandığında başlatılır . Komut dosyası, bir takma ad veya kabuk işlevi olarak modül komutunu, Modüller ortam değişkenlerini oluşturur