我想编写一个在特定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
良好的流程管理和乐趣。