get_download_file_path: command not found (asdf bug已解决)

今天遇到一个特别奇怪的问题,前前后后折腾了差不多一个小时,走了不少弯路,最后发现是官方插件的 bug。把整个排查过程分享出来,希望能帮到遇到同样问题的朋友。

事情的起因是这样的。我有一个 Laravel 项目,一直用 asdf 来管理 PHP 版本。如果你不知道 asdf 是什么,简单说它就是一个通用的版本管理工具,类似于 nvm 管理 Node.js、pyenv 管理 Python,但 asdf 可以用一个工具管理几乎所有语言的版本,非常方便。

复制代码
asdf install php 8.1.2

执行完这条命令后,屏幕上刷出了一堆信息,下载 PHP 源码什么的都挺正常,但最后报了两个错误:

复制代码
/home/shen/.asdf/plugins/php/bin/install: line 10: get_download_file_path: command not found
/home/shen/.asdf/plugins/php/bin/install: line 64: download_source: command not found

看到 command not found,我第一反应是不是 asdf 本身有问题。于是我开始了一系列「错误」的排查:首先,我尝试更新 php 插件:asdf plugin update php。结果提示已经是最新了。然后,我干脆把插件删了重装:asdf plugin remove php,再 asdf plugin add php。结果还是一样的错误。接着,我开始怀疑是不是 asdf 版本太旧了。我当时用的是 v0.14.0,于是把整个 ~/.asdf 目录删掉,重新 git clone 安装了 v0.15.0。结果呢?还是不行,同样的报错。到这里我意识到,问题可能根本不在 asdf 本身,而是出在 asdf-php 这个插件上。

于是我开始仔细排查插件的目录结构:

复制代码
ls -la ~/.asdf/plugins/php/bin/

发现 bin 目录下有这么几个文件:download、exec-env、install、latest-stable、list-all、list-bin-paths。看起来都挺正常的。

但是当我去看 install 脚本的内容时,发现它调用了 get_download_file_path 和 download_source 这两个函数。问题是,这两个函数定义在 download 脚本里,而 install 脚本压根就没有 source 引入 download 脚本!这不是妥妥的 bug 吗?

为了验证我的猜测,我又看了一下插件的 git 提交历史:

复制代码
cd ~/.asdf/plugins/php && git log --oneline -10

果然,最近有一个提交 e09cb20,commit message 写的是 "Move download logic to separate script and simplify install args"。翻译过来就是「把下载逻辑移到单独的脚本,简化安装参数」。

问题就出在这里!开发者把下载相关的函数移到了 download 脚本,但是 install 脚本里还在调用这些函数,却忘了引入 download 脚本。这是一个很典型的重构时遗漏的问题。

知道了原因,解决方法就很简单了------回退到这个提交之前的版本:

复制代码
cd ~/.asdf/plugins/php && git checkout 1eaf4de

然后再执行 asdf install php 8.1.2,一切正常,PHP 8.1.2 顺利安装完成。

相关推荐
深念Y2 天前
fnOS-k3s-ResolvConf权限700-Bug分析
内核·bug·nas·k3s·fnos·魔改内核
不正经学生2 天前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
Capricorn19883 天前
Bug排障实录:Software 3.0 遭遇文献幻觉?知芽 Notebook Skill 底层架构解析
人工智能·笔记·架构·bug·论文笔记
项目管理与代码3 天前
Bug跟踪管理系统对比:从提报效率、流转体验与数据分析能力三个维度评估
bug·项目管理·bug跟踪
福大大架构师每日一题5 天前
RAGFlow v0.27.1 发布:新增 Azure DevOps、You.com 搜索,修复海量 Bug,性能大幅提升!
bug·azure·devops
树码小子5 天前
测试(6) - bug篇(上)
软件测试·bug
周杰伦的稻香6 天前
[bug]npx @deepseek-ai/dsh plugin ...无限吃内存卡死
bug
T01156187 天前
全栈项目实战手记|艺培场馆课时预约小程序底层安全、交互、分包全量迭代复盘
安全·小程序·bug·前端实战·全栈项目实战手记·小程序实战
霍格沃兹测试学院-小舟畅学8 天前
DeepSeek Harness vs Claude Code:谁更会修Bug、跑测试?
bug
咖啡星人k8 天前
2026 AI 自动化测试:让 AI 帮你写用例、跑测试、修 Bug(MonkeyCode 云端实战)
人工智能·功能测试·单元测试·测试用例·bug·集成测试