1

我在 Ubuntu 上工作并使用 bash shell

我正在尝试执行如下所示的“别名”,但它不起作用

当我尝试 'shopt -s expand_aliases; 源环境.sh;hal-on' 在函数外部它可以工作,但在函数内部它不起作用

do_build()
{
source env.sh

shopt -s expand_aliases

hal-on
}

# Main
do_build

错误信息

  • hal-on ./temp:第 10 行:hal-on:找不到命令

我究竟做错了什么?

4

1 回答 1

0

别名在 bash 中有奇怪的行为,使用函数几乎总是更好。您在示例中所拥有的可能是函数中别名的定义,我不确定那里会发生什么。

此外,在函数中源文件是不常见且有问题的,除非它只是一堆变量集。实际上,除非您明确将变量声明为“本地”,否则在外部执行源代码几乎没有什么区别。

我可以看到您可能遇到的一种情况是仅在特定条件下执行环境中定义的事情。如果您的变量集很复杂,我可以看到您不想这样做。但实际上将其限制为变量集......没有函数/别名定义。

阅读 bash 手册页中的别名。搜索“别名未展开”。它与“别名在读取时扩展”有关。通过一些实验,即使在函数定义之前设置了 shopt,别名似乎也不会在函数内扩展。

所以...改用函数。

alias foo="bar baz"变成foo(){ bar baz "$@" ;}并且通常操作相同。

于 2017-11-22T23:24:52.593 回答