当前位置: 首页 > news >正文

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 顺利安装完成。


http://www.cnnetsun.cn/news/90467.html

相关文章:

  • PPIO上线阿里Wan 2.6:制作电影级AI视频,对标Sora2
  • 【混合检索的Dify结果融合】:揭秘高效信息聚合背后的黑科技
  • 从零搭建高效音频流水线:Dify 1.7.0切片配置完整教程
  • 大数据ETL中的数据质量提升工具与方法
  • 筑巢引凤 - Ascend C开发环境极速部署与验证全攻略
  • 模型训练中的精度保障:Ascend C算子数值稳定性分析
  • 【金融风险对冲实战指南】:掌握R语言在投资组合风险管理中的7大核心技巧
  • 空间转录组批次校正实战指南(R语言完整代码+案例解析)
  • 计算机毕业设计附项目源码帮做/Java管理系统/springboot网站/深度学习/神经网络算法/yolo图像识别/从选题到部署,一篇搞定!
  • 紧急应对模型版本混乱:R与Python部署同步的实时解决方案
  • 气象模型预测失败的真相,R语言误差分析告诉你答案
  • 【Dify 1.7.0语音识别革命】:为什么专业团队都在抢用新转写引擎?
  • 强化学习DeepQLearning求最优策略的代码实现
  • 加密PDF处理新进展(Dify进度跟踪深度剖析)
  • 从零构建智能Agent文档系统:Dify配置与最佳实践全揭秘
  • 高负载环境下Docker Offload调度失控?优先级设置不当是元凶!
  • 还在手动校验语音数据?Dify 1.7.0自动检测功能已上线(限时体验)
  • 专家警告:不掌握量子计算镜像缓存技术,你的研发效率已落后同行三年
  • 对标行业高标准,全星研发项目管理系统赋能汽车芯片研发升级:PLM系统更专业化
  • LC.669 | 修剪二叉搜索树 | 树 | 递归与重连
  • DAY29 pipeline管道
  • A29语音模组:100dB消回音黑科技,超大音量下也能清晰通话
  • 1688 拍立淘接口(item_search_img)技术全景解析
  • Dify如何逆向解析加密PDF?,深入剖析现代文档安全的攻防博弈
  • 测试工程师必备:利用Apipost AI编写脚本,快速实现多接口串联流程
  • IP 扫盲:不要再迷信家宽
  • 基于协同过滤算法的动漫推荐系统源码 Java+SpringBoot+Vue3
  • 高效量子电路设计秘籍(R驱动的3种前沿优化策略)
  • 分分钟带你杀入Kaggle Top 1%,大牛带队,100%拿牌!
  • IP6808至为芯支持PD快充输入的15W无线充电方案SOC芯片