news 2025/12/18 1:18:06

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 顺利安装完成。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/16 19:50:42

如何在24小时内完成空间转录组功能富集全流程?R语言自动化脚本大公开

第一章:空间转录组功能富集分析概述空间转录组技术结合了传统转录组测序与组织空间位置信息,使得研究人员能够在保留细胞空间分布的前提下解析基因表达模式。这一技术的快速发展推动了对复杂组织微环境的深入理解,尤其在肿瘤微环境、发育生物…

作者头像 李华
网站建设 2025/12/16 19:50:28

LobeChat能否集成地衣生长速率?空气污染长期监测指标

LobeChat能否集成地衣生长速率?空气污染长期监测指标 在城市空气质量日益受到关注的今天,我们依赖精密传感器网络实时播报PM2.5指数。但你是否想过,一面长满斑驳地衣的老墙,其实早已默默记录了过去十年的大气变化?这些…

作者头像 李华
网站建设 2025/12/16 19:48:58

Docker与Vercel AI SDK环境变量实战指南(从本地开发到生产部署全解析)

第一章:Docker与Vercel AI SDK环境变量概述在现代全栈应用开发中,安全地管理敏感配置信息至关重要。环境变量作为解耦应用代码与运行时配置的核心机制,在 Docker 容器化部署和 Vercel AI SDK 集成场景中扮演着关键角色。它们允许开发者将 API…

作者头像 李华
网站建设 2025/12/16 19:47:34

Dify 1.7.0音频降噪实战指南(从配置到优化的完整流程)

第一章:Dify 1.7.0 的音频降噪处理Dify 1.7.0 引入了全新的音频预处理模块,重点增强了对语音输入的降噪能力,适用于语音识别、智能助手和远程会议等场景。该版本集成了基于深度学习的实时降噪算法,能够有效分离人声与背景噪声&…

作者头像 李华
网站建设 2025/12/16 19:47:26

【Linux命令大全】001.文件管理之chgrp命令(实操篇)

【Linux命令大全】001.文件管理之chgrp命令(实操篇) ✨ 本文全面讲解 Linux 系统中 chgrp 命令的功能、参数及实战应用,帮助系统管理员和高级用户更好地管理文件和目录的组归属关系。文章涵盖参数详解、基础用法、进阶技巧以及常见场景的实际…

作者头像 李华
网站建设 2025/12/16 19:46:36

通信运营商客户服务管理数智化实践

在数字经济纵深发展与 5G 规模化应用的双重驱动下,通信运营商客户服务正面临 “需求多元化、体验个性化、服务场景化” 的全新挑战。传统以人工热线、线下营业厅为主的服务模式,已难以适配亿级用户的实时咨询、跨场景诉求与精细化服务需求。数智化转型成…

作者头像 李华