我在 Ubuntu 上工作并使用 bash shell
我正在尝试执行如下所示的“别名”,但它不起作用
当我尝试 'shopt -s expanded_aliases;源环境.sh; hal-on' 在函数外部有效,但在函数内部无效
do_build()
{
source env.sh
shopt -s expand_aliases
hal-on
}
# Main
do_build
错误信息
- 哈尔昂 ./temp: 第 10 行:hal-on:找不到命令
我做错了什么?
最佳答案
别名在 bash 中有奇怪的行为,使用函数几乎总是更好。您在示例中所拥有的可能是函数中别名的定义,我不确定那里会发生什么。
另外,在一个函数中使用源文件是不常见的,而且有问题,除非它只是一堆变量集。事实上,除非您明确声明变量是“本地的”,否则在外部执行源代码几乎没有区别。
我可以看到您可能遇到的一种情况是仅在特定条件下执行环境中定义的事情。如果您的变量集很复杂,我可以看到您不想这样做。但实际上将其限制为变量集……没有函数/别名定义。
阅读 bash 手册页中的别名。搜索“别名未展开”。它与“别名在读取时扩展”有关。通过一些实验,即使在函数定义之前设置了 shopt,别名似乎也不会在函数内展开。
所以...改用函数。
alias foo="bar baz"
变为 foo(){ bar baz "$@";}
并且通常操作相同。
关于bash - shopt 在 shell 函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565923/