Elvish `runtime:` 模块完全指南:在脚本中获取解释器运行时路径信息
CLI编程语言开发工具【免费下载链接】elvishPowerful scripting language versatile interactive shell项目地址https://gitcode.com/gh_mirrors/el/elvish点击查看免费下载导读runtime:是 Elvish 内置的标准模块之一它向脚本与交互式会话暴露当前 Elvish 解释器的运行时环境信息包括可执行文件路径、模块搜索目录、RC 文件路径等四个只读变量。本文以官方参考文档 website/ref/runtime.md 为骨架结合模块源码 pkg/mods/runtime/runtime.go、runtime.d.elv 以及 shell 层的路径解析实现完整讲解这四个变量的语义、取值规则、底层来源与典型用法帮助你编写出能感知自身运行环境的健壮 Elvish 脚本。模块概览一个只读的运行时信息命名空间runtime:模块在 Elvish 的模块体系中属于运行时自省类模块——它不提供任何命令或函数只通过四个只读变量把解释器内部的状态暴露给脚本变量名含义取值失败时$runtime:elvish-path当前 Elvish 可执行文件的路径$nil$runtime:lib-dirs模块搜索目录列表空列表[]$runtime:rc-pathRC 文件路径忽略命令行覆盖非交互模式也可用$nil$runtime:effective-rc-path本次会话实际使用的 RC 文件路径$nil这四个变量全部通过vars.NewReadOnly创建见 runtime.go因此任何对它们的赋值都会报错。模块的官方文档定位是提供关于 Elvish 运行时的信息runtime.md而每个变量的完整语义说明维护在源码中的文档注释里runtime.d.elv二者共同构成了本模块的参考文档。$runtime:elvish-path当前解释器二进制的位置这个变量保存当前正在运行的 Elvish 可执行文件的绝对路径典型输出类似~ put $runtime:elvish-path ▶ /usr/local/bin/elvish在实现上它直接调用 Go 标准库的os.Executable()见 runtime.go如果该调用出错例如在某些受限环境下无法解析自身路径变量值为$nil~ put $runtime:elvish-path ▶ $nil典型用途脚本需要调用同一个 Elvish 解释器而非在PATH中另外查找来重新启动自己或运行子命令时使用此变量可以保证版本与行为一致。注意此变量反映的是当前进程的路径不随PATH变化。$runtime:lib-dirs模块搜索目录$runtime:lib-dirs是一个列表包含 Elvish 查找模块use语句时所搜索的全部目录顺序即搜索优先级~ put $runtime:lib-dirs ▶ [/home/user/.config/elvish/lib /home/user/.local/share/elvish/lib /usr/local/share/elvish/lib]它的值与参考文档 module search directories 一节所述完全一致由 shell 层在启动时计算并写入Evaler.LibDirs字段见 eval.go。目录解析逻辑位于 pkg/shell/paths.go按如下顺序收集配置目录roaming lib$XDG_CONFIG_HOME/elvish/lib未设置XDG_CONFIG_HOME时退回到平台默认配置目录数据目录local lib$XDG_DATA_HOME/elvish/lib未设置时退回平台默认数据目录系统数据目录遍历$XDG_DATA_DIRS中每个目录下的elvish/lib未设置时使用平台默认数据目录列表。如果路径解析过程发生错误例如无法确定任何配置目录$runtime:lib-dirs为空列表[]且 shell 会在启动时向 stderr 打印警告见 shell.go。典型用途调试模块为什么找不到问题时先打印该变量确认搜索目录是否符合预期或在脚本中动态遍历这些目录安装/检查本地模块。$runtime:rc-path与$runtime:effective-rc-pathRC 文件的默认与实际这两个变量是一对语义差异需要仔细区分$runtime:rc-path默认 RC 文件路径$runtime:rc-path是 RC 文件的默认路径其关键特性是忽略任何命令行覆盖如-rc、-norc标志因此它总是指向按约定应该存在的那个 RC 文件非交互模式下也可用——即使本次会话根本不会加载 RC 文件该变量依然有值。它由rcPath()计算优先$XDG_CONFIG_HOME/elvish/rc.elv否则退回平台默认配置目录下的elvish/rc.elv见 paths.go。如果确定路径时出错值为$nil。$runtime:effective-rc-path实际使用的 RC 文件$runtime:effective-rc-path则反映本次会话真正生效的 RC 路径取值规则在 runtime.d.elv 中定义得很明确会话情形effective-rc-path的值非交互模式运行或带-norc标志$nil不加载任何 RC带-rc PATH标志PATH的绝对路径交互模式且未带-norc/-rc与$rc-path相同对应的赋值逻辑位于 shell.go非交互或-norc时保持字段为空-rc提供显式路径时通过filepath.Abs转为绝对路径默认情形下直接沿用rc-path的计算结果。~ put $runtime:rc-path ▶ /home/user/.config/elvish/rc.elv ~ put $runtime:effective-rc-path ▶ /home/user/.config/elvish/rc.elv典型用途在rc.elv内部判断我这次是被正常加载的还是仅仅作为默认路径存在或者确认-rc覆盖是否生效。实现原理一次快照式的命名空间构建runtime:模块的构建函数为Ns(ev *eval.Evaler) *eval.Ns见 runtime.go其实现有两点值得注意快照语义四个变量在模块被加载的那一刻就从Evaler的字段LibDirs、RcPath、EffectiveRcPath读取一次并固化之后不再与解释器状态联动。因此源码注释明确要求Evaler的所有公共属性必须在调用本函数之前设置完毕runtime.go。在正常启动流程中shell.go 的 makeEvaler 先完成路径计算再通过mods.AddTo(ev)安装标准模块顺序恰好满足这一前提。空串归一为$nil路径类变量在值为空字符串时会通过nonEmptyOrNil归一化为$nilruntime.go避免向脚本暴露无意义的空串让脚本可以统一用 $nil判断不可用。测试验证好路径与坏路径两种场景模块的行为由转录测试transcript tests覆盖测试文件 runtime_test.elvts 构造了两组场景好路径场景use-runtime-good-paths将os.Executable桩为返回/path/to/elvish并给Evaler设置LibDirs [/lib/1 /lib/2]、RcPath /path/to/rc.elv、EffectiveRcPath /path/to/effective/rc.elv随后验证四个变量输出对应值坏路径场景use-runtime-bad-paths让os.Executable返回错误、所有Evaler路径字段保持零值验证elvish-path、rc-path、effective-rc-path均为$nil、lib-dirs为空列表。驱动测试的 runtime_test.go 通过//go:embed *.elvts嵌入转录文件并用testutil.Set临时替换runtime.OSExecutable该替换点暴露在 testexport_test.go 中仅测试用。测试注释还特别说明之所以需要手动替换默认模块是因为runtime 模块在初始化时会读取 Evaler 字段runtime_test.go这正好印证了上文快照式构建的实现特性。实践建议如何在脚本中使用runtime:模块runtime:是内置模块无需use即可直接以$runtime:前缀访问。综合上述语义给出几条可直接落地的用法判断自身是否可重入调用$runtime:elvish-path而非在PATH中查找elvish保证子进程与当前解释器同版本if (has-key $runtime:elvish-path $nil) { # 无法确定自身路径退回依赖 PATH 中的 elvish ^elvish -c ... } else { ^$runtime:elvish-path -c ... }排查模块加载失败先打印$runtime:lib-dirs核对期望安装模块的目录是否在搜索路径中注意lib-dirs是列表可用all或下标逐一检查。区分默认 RC与实际 RC当$runtime:effective-rc-path $nil时说明当前会话非交互或-norc不会执行任何 RC 初始化逻辑此时在脚本中应跳过依赖 RC 环境的操作当它等于$rc-path时说明走的是默认路径而非-rc覆盖。需要留意的是这些变量全部为只读快照且面向当前解释器进程的信息因此在不同机器、不同启动标志下取值会不同——脚本中应始终先判空$nil/ 空列表再使用。小结runtime:模块虽然只有四个只读变量却是 Elvish 脚本感知自身运行环境的唯一官方入口elvish-path定位解释器二进制lib-dirs揭示模块搜索路径rc-path与effective-rc-path组合起来则完整刻画了 RC 文件的默认位置与实际加载情况。结合 runtime.go 的快照式实现与 runtime_test.elvts 的双场景测试你可以准确预判每个变量在何种启动条件下取值、何时为$nil从而写出对环境变化更稳健的配置脚本。赞分享CLI编程语言开发工具【免费下载链接】elvishPowerful scripting language versatile interactive shell项目地址https://gitcode.com/gh_mirrors/el/elvish点击查看免费下载相关推荐3 个参数搞定 B 站批量取关BiliBiliToolPro UnfollowBatched 完整配置指南3 个参数搞定 B 站批量取关BiliBiliToolPro UnfollowBatched 完整配置指南 BiliBiliToolPro 是一款支持 Doc后端任务调度工作流自动化ElixirLS反射机制运行时信息获取ElixirLS反射机制运行时信息获取 引言 在Elixir开发过程中你是否曾遇到过这样的困境需要快速了解模块的内部结构、函数签名、类型定义或者想要在运Elvish 0.19.1 版本全解析doc 模块、conj/compact 新命令与 runtime 模块Elvish 0.19.1 版本全解析doc 模块、conj/compact 新命令与 runtime 模块 导读 Elvish 0.19.1 于 2023CLI编程语言开发工具上一篇AlwaysOnTop窗口置顶工具提升多任务处理效率的必备解决方案下一篇重构窗口管理逻辑AlwaysOnTop工具的认知效率革新创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

文献综述中针对多源异构实验数据展开横向对比评估的综述技巧

文献综述中针对多源异构实验数据展开横向对比评估的综述技巧

文献综述中针对多源异构实验数据展开横向对比评估的综述技巧在工程科学、生物医学、材料物理与实证计算机科学的学位论文中,文献综述不仅要梳理理论框架,更承担着一项极为硬核的任务:系统横向对比既有代表性实验文献在不同测试集上的实测参数…

2026/10/9 14:40:11 阅读更多 →
文献综述中辨析经典奠基文献与最新前沿成果传承关系的写作方法

文献综述中辨析经典奠基文献与最新前沿成果传承关系的写作方法

文献综述中辨析经典奠基文献与最新前沿成果传承关系的写作方法在硕士与博士研究生毕业论文外审中,文献综述(Literature Review)往往被评审专家视为考察作者学术功底与理论视野的试金石。然而在很多初稿中,文献引述常常呈现出两种极…

2026/10/13 9:57:33 阅读更多 →
Java音频处理SDK源码解析:基于ffmpeg的音频转码与提取实战

Java音频处理SDK源码解析:基于ffmpeg的音频转码与提取实战

简介:这是一套面向Java开发者的音频处理工具包源码,基于ffmpeg封装,帮助开发者快速实现音频格式转换、信息提取等常见需求,适用于音频播放器、编辑器及各类多媒体应用开发,对具备一定Java基础、希望省去底层音频编解码…

2026/10/12 18:04:36 阅读更多 →

最新新闻

NC65销售订单批量导入实战:从数据清洗到SQL脚本全攻略

NC65销售订单批量导入实战:从数据清洗到SQL脚本全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:31:40 阅读更多 →
一场用英语讨论中国流量生意的会议

一场用英语讨论中国流量生意的会议

2026 年深圳 SEO 大会公布了一组数字:参会约 500 人,其中中国大陆之外的面孔占 49%。 在中国本土举办、讨论全球搜索生态的会议上,海内外从业者接近对半——这个比例放在五年前难以想象。会议组织者把这种状态概括为“Western Meet Eastern”…

2026/10/15 3:31:40 阅读更多 →
MATLAB插值计算实战指南:选对方法比调参更重要

MATLAB插值计算实战指南:选对方法比调参更重要

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:31:40 阅读更多 →
Linux C 语言手写嗅探器,不依赖库也能抓包

Linux C 语言手写嗅探器,不依赖库也能抓包

为什么放弃 libpcap 直接操作原始套接字在学习网络协议栈或开发嵌入式监控工具时,我们往往过度依赖 libpcap 这样的高级库。虽然它们封装良好、调用简单,但就像黑盒一样,屏蔽了数据包从网卡到用户空间的真实流转过程。对于希望深入理解 Linux…

2026/10/15 3:31:40 阅读更多 →
智能梯控第三方接口快速接入指南

智能梯控第三方接口快速接入指南

在智慧楼宇的改造项目中,电梯门禁系统的对接往往是最让人头疼的环节之一。很多开发者在面对老旧的梯控硬件时,常常陷入“数据拿不到、权限配不准、日志查不着”的困境。尤其是当需要同时管理多栋大楼、数十部电梯以及成百上千用户的楼层权限时&#xff0…

2026/10/15 3:31:40 阅读更多 →
从汇编到实时飞控:Apollo-11源码的工程启示与实操指南

从汇编到实时飞控:Apollo-11源码的工程启示与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:30:40 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →