如何使用 URL 的内容(例如,原始 GitHub 链接)调用 `nix-shell`?

如何使用 URL 的内容(例如,原始 GitHub 链接)调用 `nix-shell`?

将其保存到文件中,并使用该临时文件可以正常工作,

$ url="https://raw.githubusercontent.com/toraritte/shell.nixes/main/deno-latest-shell.nix"

$ curl $url > default.nix

$ nix-shell
# or
$ nix-shell default.nix

但如何在不使用临时文件的情况下做到这一点呢?到目前为止,这是我尝试过的:

管道

$ curl $url | nix-shell -

这会下载文件,然后......什么也没有发生。

$ curl $url | nix-shell

这会抛出一个错误default.nix(当然)。

工艺替代

使用运营<()档案):

$ nix-shell <(curl $url)

# ... output...
error: getting status of '/dev/fd/pipe:[11284302]': No such file or directory

但是当我更改nix-shell为时cat,它就可以工作,就像我将输出保存curl到常规文件中并打印其内容一样。

(也许用这种方法遇到了同样的问题,在为什么进程替换 <() 不能与 ssh -F 一起使用?那里的解决方案是使用 zsh 及其特殊=(...)运算符,它基本上在幕后使用临时文件。)


我知道有nix-shell -E,但即使我的具体示例 Nix 表达式不包含注释,它也可能会出现问题......

答案1

这看起来像一个 Nix bug,这里有一个类似的 bugnix eval

在修复之前,您可以使用nix-shell -E "$(curl $url)".或者只是使用 Nix nix-shell -E "import (builtins.fetchurl $url)",.

请确保在执行之前您可以信任该表达式 - 该表达式shellHook可以包含任意 bash 代码并且 nix-shell 将运行它。

相关内容