You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nu Shell中获取被source的脚本文件路径?

在Nu Shell中获取被source脚本的自身路径

在Nu Shell中,$env.FILE_PWD仅能返回主执行脚本的所在目录,当脚本被source加载时,这个变量不会指向被加载脚本的自身路径。比如你遇到的场景:

问题复现代码

main.nu

source ./lib/func.nu
echo $"Script file:  ($env.FILE_PWD)"
echo $"Sourced file: (get-sourced-file)"

./lib/func.nu

export def get-sourced-file [] {
  # 此处返回的是main.nu的路径,而非自身路径
  $env.FILE_PWD
}

执行nu main.nu后输出:

Script file:  /tmp/test
Sourced file: /tmp/test

解决方案

Nu Shell提供了$env.SOURCED_FILE_PATHS环境变量,它是一个列表,按加载顺序记录了所有被source的文件的绝对路径。对于当前被加载的脚本来说,它的路径会是这个列表的最后一项。

修改./lib/func.nu如下:

export def get-sourced-file [] {
  # 获取当前被source脚本的绝对路径
  let self_file_path = $env.SOURCED_FILE_PATHS | last
  # 获取该脚本所在的目录路径
  $self_file_path | path dirname
}

再次执行nu main.nu,输出会变为:

Script file:  /tmp/test
Sourced file: /tmp/test/lib

补充说明

如果存在多层嵌套source的情况,$env.SOURCED_FILE_PATHS会按加载顺序依次存入路径,此时可以根据嵌套层级选择对应的列表项,而非固定取最后一项。

内容的提问来源于stack exchange,提问作者tkokasih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:53:19