shopt在shell函数内部不起作用

时间:2017-01-10 09:54:33

标签: bash shell ubuntu

我在Ubuntu上工作并使用bash shell

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

当我尝试'shopt -s expanded_aliases; source env.sh; hal-on'外部函数它可以工作但在函数内部它不起作用

do_build()
{
source env.sh

shopt -s expand_aliases

hal-on
}

# Main
do_build

错误消息

  • HAL-上 ./temp:第10行:hal-on:命令未找到

我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

此外,在函数中源文件并不常见且有问题,除非它只是一堆变量集。事实上,除非您明确声明变量是" local",否则在外部执行来源几乎没有什么区别。

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

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

所以......改用函数。

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