首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows中的Haskell runCommand

Windows中的Haskell runCommand
EN

Stack Overflow用户
提问于 2014-01-01 10:56:09
回答 1查看 566关注 0票数 3

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

代码语言:javascript
复制
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",但仍然不会更改提示。

EN

回答 1

Stack Overflow用户

发布于 2014-01-01 11:06:21

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

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

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

您可能还必须从运行Prompt命令切换到直接在您的Haskell进程中实际更改PROMPT环境变量,因为当您像上面那样运行Prompt命令时,实际发生的情况是启动一个新的cmd.exe来运行该命令,因此环境更改会立即被丢弃。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20865166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档