微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

inotifywait - 每秒只重启 ghci 保存

如何解决inotifywait - 每秒只重启 ghci 保存

脚本

我有一个简短的 bash 脚本,它使用 inotifywait 重新启动给定文件上的 ghci repl:

#!/bin/sh

$(while inotifywait -e close_write $1; do pkill ghc; done) &

while inotifywait -e close_write $1
do 
    sleep 2
    stack ghci $1    
done

说明

这一行:

$(while inotifywait -e close_write $1; do pkill ghc; done) &

负责在保存文件时停止 ghc

本节:

while inotifywait -e close_write $1
do 
    sleep 2
    stack ghci $1    
done

负责在保存文件时启动 ghc(延迟 2 秒后)。

试用

鉴于在 vscode 中加载了以下 Haskell 文件

abc = 123

在终端窗口中按如下方式启动脚本:

$ ./inotifywait-stack-ghci.sh abc.hs

如果你保存文件两次(见下面的问题),repl 应该重新启动。

问题

该脚本非常有效!然而,有一个问题:repl 仅在每保存第二个文件时重新加载。所以基本上,要重新加载 repl,我必须将文件保存两次。

有人见过这种东西吗?有什么解决办法吗?

备注

  • 我已经用 inotify 标记了这篇文章,但也用 haskell 标记,以防问题在某种程度上与 ghci 不同。

  • 在 vscode 中编辑文件时,脚本运行良好。由于 Vim 和 Emacs 保存文件的方式,它们似乎不能很好地使用它。

  • 该脚本假设您一次只运行一个 ghc 副本。

  • 我一直在 WSL 下的 Ubuntu 20.04.2 中对此进行测试。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?