Как написать программу на Haskell, которая инициирует, а затем может запускать команды в среде nix-shell?
Я хотел бы инициировать (если не знаком с Nix), это можно рассматривать как ад, который загружает определенную среду, что довольно дорого). После запуска как отдельного процесса я хотел бы иметь возможность отправлять команды этой оболочке и получать результаты. Здесь есть потенциал для некоторой сложности, связанной с проблемами параллелизма, но я подумал, что Шелли могла бы просто справиться с этим следующим образом:
#!/usr/bin/env stack
{- stack script --nix --resolver lts-14.27
--package async
--package shelly
-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
import Shelly
main :: IO ()
main = shelly $ do
run_ "nix-shell" ["-p", "cargo"]
run_ "cargo" []
В первом мы запускаем оболочку с
cargo
доступна команда, которую мы сможем запустить, используя второй вызов
run_
. Однако это приводит к ошибке, когда ПУТЬ не кажется правильным - как ни странно, он больше не содержит даже
nix-shell
в пути.
Я был бы открыт для предложений о том, как это сделать, используя различные подходы, не обязательно с помощью Shelly.