You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:09:56