# shellmet [![GitHub CI](https://github.com/kowainik/shellmet/workflows/CI/badge.svg)](https://github.com/kowainik/shellmet/actions) [![Hackage](https://img.shields.io/hackage/v/shellmet.svg?logo=haskell)](https://hackage.haskell.org/package/shellmet) [![Stackage Lts](http://stackage.org/package/shellmet/badge/lts)](http://stackage.org/lts/package/shellmet) [![Stackage Nightly](http://stackage.org/package/shellmet/badge/nightly)](http://stackage.org/nightly/package/shellmet) [![MPL-2.0 license](https://img.shields.io/badge/license-MPL--2.0-blue.svg)](LICENSE) Out of the shell solution for scripting in Haskell. Shellmet provides an easy and convenient way to call shell commands from Haskell programs. ## Usage example This README contains the usage example of the `shellmet` library. The example is runnable. You can build and execute with the following command: ```shell cabal run readme ``` ### Setting up Since this tutorial is written using Literate Haskell, first, let's write all necessary pragmas and imports. ```haskell {-# LANGUAGE OverloadedStrings #-} import Data.Semigroup ((<>)) import Shellmet (($|)) import qualified Data.Text as T ``` ### Simple scripting example Below you can see how easy it is to interact with shell commands in Haskell: ```haskell main :: IO () main = do "echo" ["Starting shellmet readme..."] text <- "cat" $| ["README.md"] let cnt = T.pack $ show $ length $ T.lines text "echo" ["Number of lines in this README: " <> cnt] ``` And the output is: ``` ⚙ echo 'Starting shellmet readme...' Starting shellmet readme... ⚙ echo 'Number of lines in this README: 54' Number of lines in this README: 54 ```