Tampaknya permohonan sederhana shell di sistem Anda tidak mewarisi alias (atau fungsi) yang didefinisikan module
, sehingga shell tidak dapat menemukannya (lihat catatan di bawah dengan kutipan). Coba type module
dari prompt untuk melihat bagaimana module
definisi saat ini.
Intinya dengan sumber seperti jika Anda menulis setiap baris skrip dari keyboard.
Perhatikan bahwa di satu sisi Anda mewarisi semua riwayat spesifik shell saat ini tetapi, di sisi lain, shell saat ini akan mengalami semua efek sisi skrip dan module
doa Anda.
Tentang perbedaan antara sumber skrip dan menjalankannya Anda dapat membaca di SuperUser Sep 2009 atau Des 2009 , Ubuntu Februari 2011 , Unix Agu 2011 , Stackoverflow Desember 2012 atau di banyak tempat lain.
Dalam hal ini di Modulefiles bagian ada peringatan :
... Variabel lingkungan tidak disetel saat membongkar modulefile. Dengan demikian, adalah mungkin untuk memuat modulefile dan kemudian membongkar tanpa variabel lingkungan kembali ke keadaan semula .
Jadi sepertinya lebih bijak untuk mengeksekusinya dalam naskah .
Untuk mencapai yang terakhir ini saya bisa berpikir:
Untuk menggunakan shell interaktif , abaikan riwayat spesifik shell saat ini, dengan memodifikasi shebang skrip Anda
#!/bin/bash -i
Shell interaktif membaca perintah dari input pengguna pada tty. Antara lain, shell tersebut membaca file startup saat aktivasi, menampilkan prompt, dan mengaktifkan kontrol pekerjaan secara default ...
Jika Anda lebih suka mewarisi cerita spesifik dari shell ini, Anda dapat mencoba untuk sumbernya ... tetapi dalam subkulit
( source runit.sh )
Cobalah untuk menemukan alias / fungsi saat ini module
dengan type module
kemudian memodifikasi skrip Anda. Perhatikan beberapa variabel lingkungan tidak dapat diatur module
.
Jika mau, Anda dapat menemukan skrip inisialisasi di direktori $MODULESHOME/init/<shell>
.
Komentar
Seperti yang diingat dalam Tanya Jawab modul
Proses anak (skrip) tidak dapat mengubah lingkungan proses induk. Memuat modul dalam skrip hanya memengaruhi lingkungan skrip itu sendiri. Satu-satunya cara Anda dapat membuat skrip mengubah lingkungan saat ini adalah dengan sumber skrip yang membacanya ke dalam proses saat ini.
Jadi jika Anda ingin menghindari memodifikasi lingkungan saat ini saya pikir lebih baik untuk mencoba mengubah shebang (1) atau sumber skrip dalam subshell (2). Saya tidak sepenuhnya yakin tentang kegunaan kasus ini (3).
Catatan
Kutipan dari halaman manual dan deskripsi modul
module
adalah antarmuka pengguna ke paket Modul. The module
alias atau fungsi mengeksekusi modulecmd
program serta memiliki shell mengevaluasi output perintah ini. Argumen pertama yang modulecmd
menentukan jenis shell.
Paket Modul dan module
perintah diinisialisasi ketika skrip inisialisasi spesifik-shell bersumber ke dalam shell . Script menciptakan perintah modul, baik sebagai fungsi alias atau shell, membuat variabel lingkungan Modul