提问人:NotTheDr01ds 提问时间:10/29/2023 更新时间:10/29/2023 访问量:51
从 Nu 中的键/值对文件设置环境变量
Set environment variables from file of key/value pairs in Nu
问:
就像 Bash 的这个问题一样,我想要一个简单的文件或类似的文件,我可以将其读取到 Nushell 环境中。虽然我通常会将其用于 API 密钥,但只需重用该问题中的相同示例:.env
MINIENTREGA_FECHALIMITE="2011-03-31"
MINIENTREGA_FICHEROS="informe.txt programa.c"
MINIENTREGA_DESTINO="./destino/entrega-prac1"
当然,Nushell 不是 POSIX,所以这些答案都行不通。
用于设置环境变量的 Nushell 语法为:
$env.foo = "value"
虽然可以修改环境的文件,但该文件必须是有效的 Nu 脚本,但事实并非如此。source-env
.env
我想保持文件的结构“标准”,以便它可以与其他 shell 和工具一起使用,但是如何使用它在 Nushell 中设置环境变量?
答:
1赞
NotTheDr01ds
10/29/2023
#1
我尝试了几次才做对,所以把它扔掉,以防它对其他人有帮助(这样我以后就可以很容易地找到它)。我在 Nushell 中找到了两种方法来做到这一点。
视为 TOML 文件
目前的文件格式是有效的 TOML 文件,Nushell 内置了对 TOML 作为结构化数据的支持。因此,我们可以通过以下方式轻松阅读它:
> open .env | from toml
╭─────────────────────────┬─────────────────────────╮
│ MINIENTREGA_DESTINO │ ./destino/entrega-prac1 │
│ MINIENTREGA_FECHALIMITE │ 2011-03-31 │
│ MINIENTREGA_FICHEROS │ informe.txt programa.c │
╰─────────────────────────┴─────────────────────────╯
从那里,由于结果是 Nushell 记录,因此可用于将其加载到环境中:load-env
> open .eenv | from toml | load-env
> echo $env.MINIENTREGA_FECHALIMITE
2011-03-31
TOML 还支持注释,因此您也可以拥有有效的 (Bash) 注释文件并忽略它们。from toml
需要注意的是,文件必须是有效的 TOML,包括引号。
或者先通过 Bash 加载它
公平的警告:我知道这看起来真的很黑客,但我已经在 Fish shell(也不是 POSIX)上成功地使用这种方法来处理 Bash 脚本几年了,它也适用于 Nushell 上的这个修改用例。
感谢这个问题的 Bash 版本的这个很好的答案:
exec bash -lic "set -o allexport && source ~.env && set +o allexport; exec nu"
这:
exec
s Bash(替换当前的 Nushell)- 设置 Bash 选项以将所有变量导出到环境中
source
的 .env- 重置选项
exec
s Nushell,取代了之前的 Bash
由于变量是从 Bash 导出的,因此它们现在将在 Nu 中可用。
- 优点:这适用于任何 Bash/POSIX 脚本/格式。
- 缺点:速度较慢,因为它会启动两个 shell 并在两个 shell 上处理启动文件。
评论