Bash别名优先级是否存在看似失效场景?关于source脚本的疑问
Bash别名与脚本source顺序的关联
Bash中别名的生效逻辑和命令解析阶段直接相关:别名仅在命令被解析时展开,而非执行阶段。这导致别名定义顺序与脚本source顺序的差异会产生截然不同的结果:
1. 先定义别名,再source调用cd的脚本
当你先定义cd的别名,再source目标脚本时,脚本内所有cd命令在解析阶段会被替换为对应的别名函数,示例代码如下:
function save_cd(){ cd "$@" echo "$(pwd)" > dummy file echo "$(pwd)" }; alias cd="save_cd"; source 'script-that-calls-cd-in-it'
此时脚本里的cd会被展开为save_cd,执行后能正常输出当前路径。
2. 先source脚本,再定义别名
如果先source调用cd的脚本,脚本内的函数在解析时会直接将cd绑定为Bash内置命令。后续再定义cd别名时,已经解析完成的函数不会重新处理cd调用,依然使用内置的cd,自然不会触发save_cd里的输出逻辑。
内容的提问来源于stack exchange,提问作者user377241
相关产品推荐
相关产品推荐

