Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu 如何将GHCI(命令和命令结果)输出到bash和文本文件?_Ubuntu_Haskell_Sh_Ghc - Fatal编程技术网

Ubuntu 如何将GHCI(命令和命令结果)输出到bash和文本文件?

Ubuntu 如何将GHCI(命令和命令结果)输出到bash和文本文件?,ubuntu,haskell,sh,ghc,Ubuntu,Haskell,Sh,Ghc,我想要什么 将输入到GHCI的命令复制到文本文件中 例如:我将一个文件加载到GHCI中,并在该文件中运行一个函数,我希望如何运行该函数以打印到文本文件中 复制命令输入的结果,即使它是一个错误。我还希望命令和结果像普通一样显示在shell上。(我用这个来跟随我的教授,这样我就可以输入他的命令,以后再学习) 如果我不必每次在GHCI上运行任何命令时都键入一个大命令,我会更喜欢它。所以我想在加载GHCI时记住一个txt文件,它会把所有的东西都推到那里。我还希望它附加到文本文件,而不是覆盖 到

我想要什么

  • 将输入到GHCI的命令复制到文本文件中
    • 例如:我将一个文件加载到GHCI中,并在该文件中运行一个函数,我希望如何运行该函数以打印到文本文件中
  • 复制命令输入的结果,即使它是一个错误。我还希望命令和结果像普通一样显示在shell上。(我用这个来跟随我的教授,这样我就可以输入他的命令,以后再学习)
  • 如果我不必每次在GHCI上运行任何命令时都键入一个大命令,我会更喜欢它。所以我想在加载GHCI时记住一个txt文件,它会把所有的东西都推到那里。我还希望它附加到文本文件,而不是覆盖
到目前为止我所发现的

  • 使用ghci file.hs |&tee加载ghci-a file.txt可以工作,但它不打印我输入的命令,只打印结果(包括错误)
  • 在~/.ghc/ghci_history中有一个ghci历史记录,它将下一个输入到ghci的命令追加到文件顶部(第一行),但不包括命令的结果
  • bash历史记录不包括我输入的GHCI命令。它保存的最后一件事是当我最初加载到GHCI时

非常感谢您的帮助。

这是我通常会使用类似的工具自动完成的事情。例如,以Expect脚本为例:

spawn {*}[lrange $argv 0 end]
log_file ghci.log
interact
我可以像这样运行GHCi:

expect ghci.expect stack ghci
第一行有点多余,但这提供了一个示例,说明如何将范围更改为,例如,
lrange$argv 1 end
,以跳过第一个参数并将其用于其他用途,如日志文件名:

spawn {*}[lrange $argv 1 end]
log_file [lindex $argv 0]
interact
这样调用:

expect ghci.expect ghci.log stack ghci
无论哪种方式,默认情况下附加的日志文件
ghci.log
(使用
log\u文件-noappend
覆盖)将包含我的整个交互:键盘输入、标准输出和标准错误。我可以使用
less-R ghci.log
查看日志文件<代码>-R是通过ANSI控制代码进行颜色输出和行编辑(退格、箭头等)所必需的


这足以复制出部分交互,但日志文件本身将相当混乱,因为它基本上是在键级别进行日志记录,因此,如果要删除控制代码,可能需要进一步处理。
交互
命令还接受一组用于定义自定义交互命令的参数,有关详细信息,请查看链接的手册页。

这就是
脚本
命令的作用。您可以这样使用它:

% script -a ghci.log -c ghci
Script started, output log file is 'ghci.log'.
GHCi, version 8.10.4: https://www.haskell.org/ghc/  :? for help
Prelude> "lul"
"lul"
Prelude> :q
Leaving GHCi.
% cat ghci.log
Script started on 2021-03-17 20:28:31-04:00 [TERM="rxvt-unicode-256color" TTY="/dev/pts/8" COLUMNS="106" LINES="56"]
GHCi, version 8.10.4: https://www.haskell.org/ghc/  :? for help
Prelude> "lul"
"lul"
Prelude> :q
Leaving GHCi.
请注意,它非常认真地记录所有发生的事情,包括颜色代码、退格和其他终端控制序列,因此您应该注意查看和编辑结果日志的方式。

如果使用“进程替换”,这可能会起作用