将其保存到文件中,并使用该临时文件可以正常工作,
$ 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 将运行它。