gpt4 book ai didi

Haskell 获取特定用户的主目录路径

转载 作者:行者123 更新时间:2023-12-01 12:19:55 24 4
gpt4 key购买 nike

我想创建一个函数来扩展 ~user 形式的名称和该用户的主目录(通常是 /home/user/),包括 ~ root,通常是 /root/。我知道 getHomeDirectory 方法可以获取当前用户的主目录,但我不知道有任何函数可以确定给定用户的主目录。

到目前为止

我有以下功能,它用用户的主目录替换任何文件路径中的前导 ~

-- join path with '/', except at root
-- opposite of breakPath
rejoinPath :: [FilePath] -> FilePath
rejoinPath [] = ""
rejoinPath (p:ps)
| p == "/" = p ++ go ps
| otherwise = go (p:ps)
where
go :: [FilePath] -> FilePath
go [] = ""
go [p] = p
go (p:ps) = p ++ "/" ++ go ps

-- split path on '/', erasing separator except at root
-- opposite of rejoinPath
breakPath :: FilePath -> [FilePath]
breakPath [] = []
breakPath (c:cs)
| c == '/' = "/" : go "" cs
| otherwise = go [c] cs
where
go :: FilePath -> FilePath -> [FilePath]
go z [] = [z]
go z (c:cs)
| c == '/' = z : go "" cs
| otherwise = go (z ++ [c]) cs

expandHome :: FilePath -> IO FilePath
expandHome p = rejoinPath <$> (go $ breakPath p)
where
go [] = pure []
go (p:ps)
| p == "~" = do
home <- getHomeDirectory
pure $ home : ps
| otherwise = pure $ p : ps

我的理解是 getHomeDirectoryHOME 环境变量中读取,而其他主目录将很难获得,但并非不可能或非常困难我希望。

注意事项

目前我只对linux系统感兴趣;我了解 Windows 和 Mac 的风格完全不同。

最佳答案

看起来这在 unix 中可用包使用 getUserEntryForName然后是 UserEntryhomeDirectory 字段。

import System.Posix.User

main :: IO ()
main = do entry <- getUserEntryForName "djf"
putStrLn (homeDirectory entry)

关于Haskell 获取特定用户的主目录路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com