Saya menggunakan skrip (yang saya tidak memiliki akses tulis) yang membuat banyak alias untuk mengatur lingkungan. Saya ingin membuat fungsi bash untuk mengatur lingkungan saya, tetapi tampaknya alias tidak bertahan hidup ke fungsi tubuh.
Inilah contoh minimal:
# aliases.sh
alias fooAlias='echo "this will never work!"'
.
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
.
Sekarang, jika saya hanya sumber secara aliases.sh
interaktif, hal-hal berfungsi seperti yang diharapkan:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
Namun, jika saya sebaliknya memanggil fungsi yang didefinisikan dalam .bashrc saya, itu tidak mengenali alias setelah sumber definisi:
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
Apa yang terjadi disini? Apakah ada sesuatu yang saya lewatkan tentang ruang lingkup alias
perintah ketika digunakan dalam suatu fungsi?
Sunting: Saya akan menambahkan beberapa detail di luar contoh minimal untuk menyinari apa yang saya coba capai.
Untuk pekerjaan saya, saya mengembangkan dan menjalankan banyak perangkat lunak pada sebuah cluster dan / atau grid. Saya memiliki beberapa proyek yang memerlukan lingkungan yang benar-benar berbeda, seperti versi gcc yang berbeda, rilis perangkat lunak tertentu, konfigurasi dan PATH data, dan berbagai variabel lingkungan. Administrator menyediakan skrip untuk mengatur berbagai hal, biasanya dengan mendefinisikan fungsi shell atau alias, yang memanggil fungsi lain atau alias atau menjalankan berbagai skrip. Bagi saya, ini kotak hitam.
Saya ingin mengatur berbagai lingkungan saya sendiri dengan satu perintah. Saat ini, saya melakukan sesuatu seperti:
[mycomputer]~/ $ source /some/environment/setup/script.sh
[mycomputer]~/ $ aliasToSetupSomeSoftwareVersion #this was defined in the above
[mycomputer]~/ $ anotherAliasForOtherSoftware
[mycomputer]~/ $ source /maybe/theres/another/script.sh
[mycomputer]~/ $ runSomeOtherSetup # this was defined in the new script
Perintah-perintah ini umumnya harus dijalankan secara berurutan. Ide saya pada dasarnya adalah hanya menyalin garis-garis di atas ke dalam blok fungsi, tetapi seperti contoh asli menunjukkan, itu tidak berfungsi. Penanganan alternatif lebih dari diterima!