尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Nushell 如何用 plugin add 注册外部插件并用 plugin use 在当前会话加载

Nushell 如何用 plugin add 注册外部插件并用 plugin use 在当前会话加载 Nushell 如何用 plugin add 注册外部插件并用 plugin use 在当前会话加载【免费下载链接】nushellA new type of shell项目地址: https://gitcode.com/GitHub_Trending/nu/nushell如果你已经编译或安装了一个 Nushell 外部插件的可执行文件但输入inc这样的命令提示找不到原因是 Nushell 的插件分两步接入plugin add把插件写入插件注册表文件registry fileplugin use把注册表里的插件加载进当前会话的作用域。本文以仓库自带的 nu_plugin_inc 插件为例走完注册 → 加载 → 验证这条完整路径并说明每一步失败时的排查方式。前提是你已经安装了 Nushellinc 插件文档 标注该示例插件要求 Nushell 0.60 或更高版本且插件可执行文件已存在于本机。准备拿到一个可注册的插件可执行文件plugin add 的实现 对输入有两个硬性要求插件可执行文件的文件名必须以nu_plugin_开头否则会报Plugin executable files must start with nu_plugin_文件名会先在当前目录查找找不到再依次查找$env.NU_PLUGIN_DIRS中的目录。仓库内提供了现成的插件 crate 可以编译出这样的可执行文件。以 nu_plugin_inc 为例其 README 给出的安装方式是在 crate 目录下执行cargo install --path .如果你是从源码构建 Nushellnu_plugin_example 的 README 则展示构建产物位于target/debug/下可直接用相对路径注册plugin add target/debug/nu_plugin_example第一步用 plugin add 注册到注册表文件在 Nushell 会话内执行以下命令中nu_plugin_inc是当前目录或$env.NU_PLUGIN_DIRS下可执行文件的文件名若你安装到了其他位置替换为实际路径例如~/.cargo/bin/nu_plugin_incplugin add nu_plugin_inc这条命令的作用需要看清楚它不会把插件命令加载进当前作用域。根据 add 命令的说明它会先运行一次插件以获取最新的命令签名然后把这些签名和元数据写入插件注册表文件——默认是$nu.plugin-path。副作用是修改该注册表文件变更会在下一次用该注册表文件启动nu时才全面生效。两个可选参数均来自同一命令的签名--plugin-config指定使用不同于$nu.plugin-path的注册表文件。示例plugin add --plugin-config polars.msgpackz nu_plugin_polars--shell短参数-s使用额外的 shell 程序cmd、sh、python 等来运行插件适用于需要解释器执行的脚本型插件。第二步用 plugin use 在当前会话加载plugin add完成后在当前会话执行plugin use inc参数是插件的名称或文件名也可以直接给文件名use 命令的示例 中plugin use query与plugin use ~/.cargo/bin/nu_plugin_query等效地指向同一插件。plugin use 的文档 强调了几个关键行为它是 parser keyword解析期关键字插件定义必须在解析时已经存在于注册表文件中所以plugin use前必须先plugin add即使你指定了文件名若从未plugin add过也不会被加载如果插件已经加载过再次执行会从注册表文件重新加载最新定义使用自定义注册表文件时写plugin use --plugin-config local-plugins.msgpackz query。脚本场景的替代路径可选文档说明在脚本中不应依赖先 add 再 use的交互流程而是预先准备好注册表文件后给plugin use传--plugin-config或者改用nu启动参数--pluginmain.rs 中处理了该选项在启动时直接加载指定插件。验证结果用 plugin list 检查注册与加载状态执行plugin list它会同时读取引擎内已加载的插件和注册表文件输出name、version、status、pid、filename、shell、commands列。list 命令的文档 定义了status的取值这是判断注册了没有、加载了没有的核心依据added插件在注册表文件中但不在引擎里——即只执行过plugin add、还没plugin useloaded同时在注册表和引擎中但进程未运行running插件进程正在运行pid列是其进程 IDmodified注册表中的状态与引擎中不一致removed引擎中还加载着但注册表文件中已不存在invalid注册表中的数据无法反序列化插件通常需要用plugin add重新注册。文档示例输出plugin list的测试用例实际pid、filename随机器不同仅作字段展示╭──────┬─────────┬─────────┬────────┬───────────────────────────┬───────┬────────────────────────────────────────────────╮ │ name │ version │ status │ pid │ filename │ shell │ commands │ ├──────┼─────────┼─────────┼────────┼───────────────────────────┼───────┼────────────────────────────────────────────────┤ │ inc │ 0.x.x │ running │ 106480 │ /opt/nu/plugins/nu_plugin_inc │ │ [{name: inc, description: Increment a number by 1.}] │ ╰──────┴─────────┴─────────┴────────┴───────────────────────────┴───────┴────────────────────────────────────────────────╯判断方式执行plugin add后status应为addedplugin use之后应变为loaded或running且commands列能看到inc命令。另外文档给出了检查运行中插件进程的方式ps | where pid in (plugin list).pid直接运行插件命令plugin use成功后会话中就能调用该插件提供的命令。inc 插件源码 中inc命令的描述是 Increment a value or version. Optionally use the column of a table.支持一个可选的 cell path 参数和三个 semver 开关。按命令自身的参数说明--minor的示例效果是1.2.1 - 1.3.0文档给出的示例值默认行为把数字加 1plugin list文档示例中该命令的描述为 Increment a number by 1.。因此加载完成后可以这样核对inc 1 # 按命令描述Increment a number by 1.应输出 2 inc 1.2.1 --minor # 按 --minor 参数描述中的示例1.2.1 - 1.3.0如果这些命令能执行且输出符合上述描述说明注册和加载都成功了。排查与限制plugin use报找不到插件文档明确指出此时you may need toplugin addthe plugin first该提示出现在 plugin stop 的错误处理 中适用于整个插件按名寻址的场景。确认注册表文件路径是否正确如果你用--plugin-config注册到了别的文件plugin use也要传同样的参数或者检查$nu.plugin-path。status为invalid表示注册表条目损坏。plugin rm 的文档 说明它的用途正是移除一个无法通过plugin add修复的无效插件签名plugin rm inc注意plugin rm只修改注册表文件不会把命令从当前会话作用域移除也不会停止正在运行的进程删除后重新执行plugin add即可恢复。停止插件进程plugin stop inc会终止已运行的插件进程副作用是结束对应进程文档还给出了停止全部插件的写法plugin list | each { |p| plugin stop $p.name }这条命令会终止所有已列出插件的进程确认没有其他插件在使用时再执行。当前会话没生效由于plugin add只改注册表文件新注册的内容要在下次启动nu后才默认可见nu_plugin_example 的 README 给出的做法是二选一——重启当前 Nushell 会话或者立即执行plugin use 路径。边界说明plugin add/plugin rm修改的是注册表文件默认$nu.plugin-path不改变当前会话作用域plugin use/plugin stop作用于当前会话的引擎状态。注册表文件路径可用--plugin-config覆盖这一参数在plugin add、plugin use、plugin rm、plugin list中均可用保持多处一致即可把插件维护在独立文件中。NU_PLUGIN_DIRS环境变量用于plugin add查找可执行文件的兜底目录main.rs 显示其默认值基于$nu的配置目录下的plugins子目录。【免费下载链接】nushellA new type of shell项目地址: https://gitcode.com/GitHub_Trending/nu/nushell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表