我在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错误消息
我做错了什么?
发布于 2017-11-22 23:24:52
别名在bash中有奇怪的行为,使用函数几乎总是更好。在您的示例中,您拥有的很可能是函数中别名的定义,而我不确定会发生什么。
此外,函数中的源文件也不常见,也存在问题,除非它只是一堆变量集。事实上,除非您显式地将变量声明为“本地”,否则在外部执行源并没有什么不同。
我可以看到,有一种情况是,您可能只做在特定条件下在环境中定义的事情。如果你的变量集很复杂,我可以看到你不想这么做。但实际上把它限制在变量集上。没有函数/别名定义。
阅读bash手册页中的别名。搜索“别名未展开”。它与“别名在阅读时被扩展”有关。通过一些实验,即使shopt是在函数定义之前设置的,别名也不会在函数中展开。
所以..。使用函数代替。
alias foo="bar baz"变成了foo(){ bar baz "$@" ;},一般情况下都是相同的。
https://stackoverflow.com/questions/41565923
复制相似问题