Я использую скрипт (к которому у меня нет прав записи), который создает несколько псевдонимов для настройки среды. Я хотел бы создать функцию 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, определенные выпуски программного обеспечения, конфигурации и пути к данным, а также различные переменные среды. Администраторы предоставляют сценарии для настройки различных вещей, обычно путем определения функций оболочки или псевдонимов, которые вызывают другие функции или псевдонимы или запускают различные сценарии. Для меня это черный ящик.
Я хотел бы настроить свои собственные различные среды с помощью одной команды. В настоящее время я делаю что-то вроде:
[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
Эти команды обычно должны выполняться по порядку. Моя идея в основном заключалась в том, чтобы просто скопировать вышеупомянутые строки в функциональный блок, но, как показывает оригинальный пример, это просто не работает. Альтернативные обходные пути приветствуются!