gpt4 book ai didi

bash - shopt 在 shell 函数中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:49 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com