Guix 中是否有相当于 nix-shell shebangs 的工具?

Guix 中是否有相当于 nix-shell shebangs 的工具?

我想编写一个在特定guix shell环境中执行的脚本。我希望有一个同等版本的nix-shell舍邦。例如,编写类似于以下内容的内容会很酷:

#!guix shell
#!--manifest=manifest.scm bash

# ... commands ...

作为解决方法,“获取”评估的搜索路径可能就足够了guix shell,例如:

#!/usr/bin/env bash

eval "$(guix shell --manifest=manifest.scm --search-paths)"

# ... commands ... 

答案1

我使用这个 shebang,它允许任何打包的解释器:

#!/usr/bin/env -S guix shell [--pure] [-m manifest.scm] [packages...] -- bash

答案2

评估搜索路径guix shell似乎是一种有效的选择。或许,它没有那么可爱#!nix-shell。但也许这就是一个特点。

也就是说,在文件顶部添加以下行,假设同一目录中存在 manifest.scm 文件:

#!/usr/bin/env bash
eval "$(guix shell --manifest=manifest.scm --search-paths)"

# ...

此外,--pure可以添加该选项以确保脚本是独立的。

#!/usr/bin/env bash
eval "$(guix shell --pure --manifest.scm --search-paths)"

# ...

如果脚本存在于shell授权目录,那么以下内容将起作用:

#!/usr/bin/env bash

eval "$(guix shell --search-paths)"

# ...

没有清单也可以:

#!/usr/bin/env bash
eval "$(guix shell --pure python-wrapper python-numpy --search-paths)"

exec python wrapped-python-script.py "$@"

然而,这种方法不支持nix-shell使用 shebang 为不同的解释器创建环境,而该变体却支持这一点。例如,nix-shell脚本本身可能是一个 python 文件,但 shebang 的神奇字节为 python 文件创建了一个 nix“配置文件”。为此,Guix 方法将使用上面的内容来创建脚本的包装器;用于exec良好的流程管理和乐趣。

相关内容