gpt4 book ai didi

haskell:cd 命令在 shake/command 库中不起作用

转载 作者:行者123 更新时间:2023-12-02 01:57:16 25 4
gpt4 key购买 nike

由于某种原因,我无法使 cd 命令在 shake/command Haskell 库中工作。它认为我用 cd 调用的目录不存在,即使它存在于文件系统中。

这是我的代码摘录:

dataDir = "data"

data Settings = Settings {
url :: String
} deriving (Eq, Show, Generic, JSON.ToJSON, JSON.FromJSON)

settings :: String -> Handler Settings
settings subfolder = let
gitPath = dataDir ++ "/" ++ subfolder ++ "/git/.git"
in do
pathExists <- liftIO $ doesPathExist gitPath
-- Stdout pwdOut <- liftIO $ cmd ("pwd" :: String)
-- liftIO $ putStrLn $ pwdOut
if not pathExists
then do
liftIO $ (cmd_ ("mkdir -p" :: String) [gitPath] :: IO ())
liftIO $ (cmd_ ("cd" :: String) [gitPath] :: IO ())
liftIO $ (cmd_ ("git init" :: String) :: IO ())
return $ Settings { url = ""}
else do
liftIO $ (cmd_ (Cwd ".") ("cd" :: String) [gitPath] :: IO ())
Stdout out <- liftIO $ (cmd ("git config --get remote.origin.url" :: String))
return $ Settings {url = out}

在两种情况下都会失败,并出现错误 cd: createProcess: runInteractiveProcess: exec: does not exit (No such file or directory):如果 dir 存在以及 mkdir命令被执行。

我无法理解它。但在我向 shake 的 github 页面提交错误之前,我想向您确认我没有做任何可能导致这种行为的愚蠢事情。

提前感谢您的帮助。

最佳答案

正如另一个答案中所述,cd 不是可执行文件,因此如果您想运行它,则必须将 Shell 传递给 cmd.

但是,几乎可以肯定,您不想在命令中调用 cd,因为它不会更改任何后续命令的目录。每个 cmd 都是一个单独的进程,具有单独的环境,因此后续命令将处于全新环境中,并且工作目录与 cd 之前相同。解决方案是将 (Cwd gitPath) 传递给要对给定目录进行操作的每个命令。

关于haskell:cd 命令在 shake/command 库中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69490577/

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