Bash source加载文件内别名执行报错modavar: command not found如何解决
报错原因
- Bash 解析函数定义的时机早于函数执行的时机:函数内部的命令会在函数定义阶段就完成别名扩展,而非等到函数运行时处理。你在函数内部才开启
expand_aliases开关、定义modavar别名,完全赶不上函数解析的流程。 - 你通过
bash --norc启动的是非交互 Shell,非交互 Shell 默认关闭expand_aliases别名扩展特性,即便你在函数内开启该参数,也无法回溯修改已经完成解析的函数内容。 - 额外问题:你代码中的
$argin变量没有赋值逻辑,调用函数时传入的链接参数不会被该变量捕获,即便别名问题修复也无法正常运行。
修复方案
方案1:弃用别名,直接使用变量调用命令(最推荐)
别名本身就不适合在脚本/函数中使用,直接用保存命令的变量即可实现同等效果,同时修正参数接收的问题:
linky(){ local comdll="cat" local argin="$1" echo "$argin" | "$comdll" #| getlinks "$argin" | sort -u }
调整后执行原命令即可正常运行。
方案2:若必须使用别名,将别名配置移到函数定义外
确保在解析函数前就开启别名扩展、完成别名定义,修改p文件内容为:
shopt -s expand_aliases comdll="cat" alias modavar="$comdll" linky(){ local argin="$1" echo "$argin" | modavar #| getlinks "$argin" | sort -u }
内容的提问来源于stack exchange,提问作者lnee_94
相关产品推荐
相关产品推荐

