gpt4 book ai didi

windows - 如何将 Haskell 嵌入到批处理文件中(hash-bang runhaskell for Windows)?

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

在安装了 GHC 的类 UNIX 系统上,我可以创建一个包含以下内容的文件

#!/usr/bin/env runhaskell
main = putStrLn "Hello, I am a UNIX script file."

使文件可执行,这将执行给定的 Haskell 代码。

如何在 Windows .bat 文件中执行等效操作?

最好不创建额外的文件,不设置环境变量,如果使用 UNC 路径或包含空格的路径访问批处理文件,Haskell 命名空间不被污染,并且如果Haskell 代码包含错误。

最佳答案

经过反复试验,事实证明这是可行的。我设计了以下内容:

@(set /p =-- < nul & type "%~f0") | runhaskell & exit /b
main = putStrLn "Hello, I am a Windows batch file."

这种机制的唯一缺点是错误消息包含由(调用的东西)runhaskell 创建的临时文件的名称。 .

下面是它如何工作的完整解释:

  • set /p =-- < nul输出 -- (和两个不相关的空格)后面没有换行符。这像这样工作:
    • set /p ANSWER=Please enter answer:版画 Please enter answer:没有换行符,等待用户输入,并将其放入环境变量 ANSWER .
    • < nul就像用户没有输入任何内容一样。
    • 作为(未记录的?)特例,可以省略环境变量名称,然后不设置任何环境变量。
  • "%~f0"是当前批处理文件的名称。
  • 因此set /p =-- < nul & type "%~f0"输出当前批处理文件,但第一行被注释掉(当解释为 Haskell 代码时)。
  • 我们通过管道将其输入 runhaskell ,它(无证地?)将其标准输入解释为非文字(!)Haskell 代码。
    • 与问题中的 UNIX 版本一样,这假设 runhaskell在当前PATH .
  • 最后,exit确保 Windows 批处理文件解释器看不到第一行之后的所有内容,并且 exit /b确保我们只退出这个脚本,而不是任何周围的 cmd.exe壳。
  • 和领先的@确保所有这些乱码不是 echo运行此脚本时编辑。

(我还没有找到对识字的 Haskell 代码执行相同操作的方法;但我目前不需要这样做。)

关于windows - 如何将 Haskell 嵌入到批处理文件中(hash-bang runhaskell for Windows)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018282/

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