gpt4 book ai didi

windows - Windows 中的 Haskell runCommand

转载 作者:可可西里 更新时间:2023-11-01 09:34:09 26 4
gpt4 key购买 nike

作为一个简单的练习,我尝试使用以下小程序更改 Win7 命令提示符窗口中的提示:

module Main where
import System.Environment
import System.Process

p :: String -> String
p name = "Prompt " ++ name ++ "\r\n"

main :: IO ()
main = do
putStrLn ("Give me a name:")
name <- getLine
putStrLn (p name)
pid <- runCommand $ p name

虽然它在命令提示符窗口中运行良好,但实际上并没有改变提示符。在命令行上手动输入相同的命令确实会改变它。当我使用“system”(它返回一个退出代码)而不是“runCommand”(它只返回一个 pid)时,它给出了“ExitSuccess”,但仍然没有改变提示。

最佳答案

这本身不是 Haskell 问题,只是您不能轻易地用任何会改变其父进程环境的语言编写程序。

在您的场景中,提示由 PROMPT 环境变量控制,“父进程”是您启动 Haskell 的命令提示符 (cmd.exe)程序来自。

我建议不要尝试更改父 cmd.exe 进程,而是生成一个新的 cmd.exe(也使用 runCommand) 更改提示后。你应该等待这个过程完成 waitForProcessrunCommand 返回的 PID,否则你的 Haskell 程序将退出,子 shell 仍在运行。

您可能还必须从运行 Prompt 命令切换到直接在您的 Haskell 进程中实际更改 PROMPT 环境变量,因为当您运行上面的Prompt命令就是启动一个新的cmd.exe只是为了运行该命令,所以环境的改变会立即被丢弃。

您可以使用 setenv package 编辑环境.

关于windows - Windows 中的 Haskell runCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20865166/

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