Можно ли вызвать скрипты 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
Черепаха - довольно хорошая современная библиотека.