Shelly.hs 项目教程
Shelly.hs Haskell shell scripting 项目地址: https://gitcode.com/gh_mirrors/sh/Shelly.hs
1. 项目介绍
Shelly.hs 是一个用于 Haskell 的系统编程库,旨在提供方便的系统编程接口。Shelly 的设计目标是方便性和实用性,而不是优雅性。它提供了详细的错误消息,并维护自己的环境,使其线程安全。Shelly 还具有低内存使用率,支持多种运行命令的方式,如 run_
和 runFoldLines
,以及对文件句柄的完全控制。
2. 项目快速启动
安装 Shelly.hs
首先,确保你已经安装了 Haskell 和 Cabal。然后,你可以通过以下命令安装 Shelly.hs:
cabal update
cabal install Shelly
编写第一个 Shelly 脚本
以下是一个简单的 Shelly 脚本示例,它将当前日期和 Git 提交信息记录到文件中:
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
import Shelly
import System.IO
import Data.Text as T
default (T.Text)
main :: IO ()
main = do
hSetBuffering stdout LineBuffering
shelly $ verbosely $ do
host <- run "uname" ["-n"]
if T.stripEnd host == "local-machine"
then do
d <- cmd "date"
c <- escaping False $ cmd "git" "log -1 | head -1 | awk '{print $2}'"
appendfile "log/deploy.log" $ T.intercalate " - " [T.stripEnd d, c]
uploads "my-server:/remote/path/" ["deploy"]
sshPairs_ "my-server" [("cd", ["/remote/path"]), ("./deploy", [])]
else do
cmd "./script/angel"
uploads :: Text -> [Text] -> Sh ()
uploads remote locals = rsync $ ["--relative"] ++ locals ++ [remote]
rsync :: [Text] -> Sh ()
rsync args = run_ "rsync" $ ["--delete", "-avz", "--no-g"] ++ args
运行脚本
将上述代码保存为 deploy.hs
,然后在终端中运行:
runhaskell deploy.hs
3. 应用案例和最佳实践
自动化部署脚本
Shelly 非常适合编写自动化部署脚本。例如,你可以编写一个脚本来自动将代码部署到远程服务器,并记录每次部署的详细信息。
系统管理任务
Shelly 还可以用于执行系统管理任务,如文件操作、环境变量管理、进程管理等。它的线程安全特性使其非常适合在多线程环境中使用。
最佳实践
- 详细日志记录:Shelly 提供了详细的日志记录功能,建议在生产环境中启用日志记录以方便调试。
- 错误处理:Shelly 提供了详细的错误消息,建议在编写脚本时充分利用这些错误消息来提高脚本的健壮性。
- 性能优化:Shelly 提供了多种运行命令的方式,如
run_
和runFoldLines
,建议根据具体需求选择合适的方式以优化性能。
4. 典型生态项目
shelly-extra
shelly-extra
是 Shelly 的一个扩展包,提供了一些额外的功能,如方便的并发/未来实现。如果你需要更多的功能,可以考虑使用 shelly-extra
。
HSH
HSH 是另一个 Haskell 的 shell 脚本库,如果你需要混合使用 String
和 ByteString
,可以考虑使用 HSH。
turtle
turtle
是一个为初学者友好的 Haskell shell 脚本库,如果你是 Haskell 的初学者,可以考虑使用 turtle
。
通过以上内容,你应该能够快速上手并使用 Shelly.hs 进行系统编程。
Shelly.hs Haskell shell scripting 项目地址: https://gitcode.com/gh_mirrors/sh/Shelly.hs