我使用一个脚本(我没有写权限)创建一个别名来建立环境。我想创建一个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以及各种环境变量。管理员通常通过定义shell函数或别名来提供脚本来设置各种内容,这些函数将调用其他函数或别名或运行各种脚本。对我来说,这是一个黑匣子。
我想用一个命令设置自己的各种环境。目前,我正在执行以下操作:
[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
这些命令通常必须按顺序运行。我的想法基本上是将上述行复制到功能块中,但是如原始示例所示,这根本行不通。替代解决方法非常受欢迎!