Как написать программу на 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.

0 ответов

Другие вопросы по тегам