Можно ли вызвать скрипты bash или shell из программы haskell?

Я пишу некоторые сценарии оболочки с haskell, которые я запускаю в gitbash, но есть еще несколько существующих сценариев, которые я хотел бы использовать из этих сценариев.

Например, я хотел бы запустить maven цели или сделать git тянуть, но без необходимости интеграции с этими инструментами.

Есть ли способ сделать это?

Ответ 1

Вы можете использовать System.Process. Например, выполнение команды seq 1 10 shell:

> import System.Process

> readProcess "seq" ["1", "10"] ""
"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n"
it :: String

> readProcessWithExitCode  "seq" ["1", "10"] ""
(ExitSuccess,"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n","")
it :: (GHC.IO.Exception.ExitCode, String, String)

Ответ 2

Да, это возможно. Вы можете использовать пакет process, который экспортирует много полезных функций. Самая простая - System.Cmd.system, которая может запускать какое-либо приложение в оболочке, давая код выхода.

Более расширенные функции также предусмотрены в модуле System.Process. С помощью этого модуля вы можете запускать процесс и связываться с ним разными способами (входной канал, коды выхода, ожидающий остановки процесса, изменение его среды и т.д.).

Ответ 3

Конечно. Вы можете начать с использования системы для вызова внешних процессов.

Более сложное управление трубопроводами и процессами доступно в кросс-платформенном виде из библиотеки System.Process.

Наконец, вы можете рассмотреть перенос своих сценариев оболочки на Haskell через DSL файлы оболочки.

Ответ 4

Черепаха - довольно хорошая современная библиотека.