bash与source执行含Lua的Shell脚本输出不一致问题排查
问题:Git Bash执行含Lua命令的脚本报错127,移除doskey别名后恢复正常
问题场景与现象
在Win10系统的Git Bash环境中,执行包含Lua命令的Shell脚本bb.sh时出现异常:
- 直接用
bash bb.sh执行:Lua的print语句未执行,返回错误码127 - 用
source bb.sh执行:得到预期输出,且两种执行方式下的$PATH完全一致
脚本bb.sh内容如下:
lua -e 'print "hha"' echo $? echo 'aaa' echo $? ( echo 'aaa' ) echo $? echo $PATH
排查信息
执行type -a lua显示,lua已被bash别名为lua53,且系统中存在多个路径的lua可执行文件。
临时解决
移除cmd启动时自动执行的doskey lua=lua53 $*命令后,bash bb.sh执行恢复正常。
原因解析
Git Bash运行在Windows环境时,会读取系统的doskey别名配置,但bash自身的别名机制和doskey不兼容:
- 当设置了doskey的
lua=lua53 $*后,新启动的bash进程(直接执行脚本时会启动新进程)会尝试解析这个doskey别名,但bash无法正确识别doskey的$*参数语法,导致无法定位到正确的lua53可执行文件,从而抛出127错误(命令未找到)。 - 而用
source执行脚本时,是在当前已启动的bash会话中运行,此时bash已经加载了自身的lua别名(也就是type -a lua显示的别名),不受doskey配置影响,因此能正常执行Lua命令。
内容的提问来源于stack exchange,提问作者lawsssscat
相关产品推荐
相关产品推荐

