Я використовую сценарій (до якого у мене немає доступу для запису), який створює купу псевдонімів, щоб створити середовище. Я хотів би створити функцію bash для налаштування свого оточення, але, схоже, псевдоніми не доживають до функції функції.
Ось мінімальний приклад:
# aliases.sh
alias fooAlias='echo "this will never work!"'
.
# .bashrc
function setupLotsOfThings() {
source aliases.sh
fooAlias
}
.
Тепер, якщо я просто aliases.shінтерактивно використовую джерело , все працює так, як очікувалося:
[mycomputer]~/ $ source aliases.sh
[mycomputer]~/ $ fooAlias
this will never work!
Однак, якщо я замість цього викликаю функцію, визначену в моєму .bashrc, він не розпізнає псевдонім після отримання свого визначення:
[mycomputer]~/ $ setupLotsOfThings
-bash: fooAlias: command not found
Що тут відбувається? Чи є щось, чого мені не вистачає в області застосування aliasкоманди при використанні функції?
Редагувати: я додам деякі деталі, що перевищують мінімальний приклад, щоб засвітити те, що я намагаюся досягти.
Для своєї роботи я розробляю і запускаю багато програмного забезпечення на кластері та / або сітці. У мене є кілька проектів, які вимагають абсолютно різних середовищ, таких як різні версії gcc, специфічні версії програмного забезпечення, PATH з конфігурацією та даними, а також різні змінні середовища. Адміністратори надають скриптам для налаштування різних речей, як правило, шляхом визначення функцій оболонки або псевдонімів, які викликають інші функції чи псевдоніми або виконують різні сценарії. Для мене це чорна скринька.
Я хотів би налаштувати свої власні різні середовища однією командою. В даний час я роблю щось на кшталт:
[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
Ці команди, як правило, повинні виконуватися в порядку. Моя ідея в основному полягала в тому, щоб просто скопіювати вищезазначені рядки у функціональний блок, але як показує оригінальний приклад, це просто не працює. Альтернативні способи подолання більш ніж вітаються!