Guixにnix-shell shebangと同等の機能がありますか?

Guixにnix-shell shebangと同等の機能がありますか?

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)"

# ...

スクリプトが存在する場合シェル認証ディレクトリ、次が動作します:

#!/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良いフロー管理と楽しさのためにスクリプトの周りにラッパーを作成します。

関連情報