问题标签 [haskell-turtle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
267 浏览

haskell - Haskell Turtle - 拆分壳

是否可以在 Turtle 库 (Haskell) 中拆分 Shell 并对 shell 的拆分执行不同的操作,以便原始 Shell 仅运行一次?

比如怎么做

这样 lstree "/tmp" 只会运行一次。

具体来说,我想使用输出将 Shell 2 和 Shell 3 发送到不同的文件。

0 投票
1 回答
726 浏览

haskell - 将字符串转换为 Turtle.FilePath

如何将连接的转换String为 Turtle FilePath?例如,以下程序尝试读取一些文本文件,将它们连接成一个新文件并删除旧文件。OverloadedStrings尽管启用了扩展,但它似乎不起作用:

抛出的错误是:

切换到output "example.txt" concat就可以了。不String只是类型别名[Char]吗?

0 投票
1 回答
28 浏览

haskell-turtle - 在同一目录下编译多个turtle脚本

虽然我可以在同一个目录中使用多个海龟脚本(例如已经解释了 pretty.hs 和 srv.hs),但我了解到我只能编译其中的一个。和

因为这也隐含地构建了 Main.o 和 Main.hi,并且 srv 和 pretty 显然需要两个不同的目标文件。

无论如何,Turtle 和 Main 模块的故事是什么:如果可以使用(并因此选择)一个模块名称,那不是更好吗,就像这样

我试图单独编译 .o 文件,但没有运气:

到目前为止没有投诉,但随后:

等等...

尽管如此,是否可以在同一个目录中编译两个不同的海龟脚本?如何?

谢谢。

0 投票
0 回答
86 浏览

haskell-turtle - 在尝试将一些 bash 脚本转换为 turtle 时仍然面临问题,尤其是罪魁祸首是 null 终止的字符串

在尝试将一些(对我来说:)常见的 bash 习语转换为海龟脚本时,我仍然遇到问题。这是一篇很长的帖子,抱歉——你可以跳过介绍性的解释,直接跳到最后的实际问题——但我希望以这种方式清楚地表达我的观点(问题)。

我在 bash 脚本中经常使用的一个习惯用法是将 find、egrep 和 xargs 与空终止字符串链接在一起(管道)。原因很简单:即使是带有空格和其他奇怪字符的文件名也不会导致任何问题。

我会使用这样的东西:

寻找 。-name "*" -print0 ... | egrep -z -Z ... | xargs -0 ...

有时我想逐行处理与 -L 1 匹配的文件

寻找 。-name "*" -print0 ... | egrep -z -Z ... | xargs -0 -L 1 ...

或者,而不是 xargs -0... 我会使用另一个工具,比如 rsync with ssh,它也可以理解以空字符结尾的字符串:-0

将我当前目录的(基本)内容同步/保存到其他目录,例如。我会使用类似的东西:

  • find 打印当前目录中的所有文件,以 null 结尾:-print0

  • egrep -v "$pat",仅保留与模式 $pat 不匹配的文件列表,仅保留基本文件,即:我不费心在 .cabal-sandbox 目录中同步/保存文件,例如,和 egrep处于此链的中间必须在此处消耗和生成以空值结尾的字符串: -z -Z 模式 pat 是预先逐个组装的。

  • 此处指示 rsync with ssh 从 stdin 获取输入:--files-from=-,再次以 null 终止:-0(请注意,虽然通常“rsync ... from to”的行为非常不同,具体取决于目录是否来自用斜杠给出,如这里:./ 或不是,这在这里不太重要,因为 rsync 的输入来自标准输入:-)

现在我试图把它变成一个乌龟脚本,取得了一些成功,但我仍然面临一些问题,并且想把它变成更惯用的乌龟:

为了完整起见,这是我当前在文件sync.hs中的工作脚本,在一个小的runturtle bash脚本的帮助下调用,我可以调用sync.hs

  1. 要么只显示正在考虑的文件列表:sync.hs -e

  2. 或将它们同步到另一个目录,如下所示:sync.hs --to /path/to/other/dir

这是代码(runturtle):

这是代码(sync.hs):

现在这是我对这个脚本的问题:

首先:我可以在命令行上运行它,我在 emacs 中的 flycheck 语法检查依赖于 ghc 和其他 hdevtools 工作正常,因此现在可以从 Haskell 对 shell 脚本的强类型中受益(感谢顺便创建了 turtle )。我什至可以在命令行上使用 turtle (cabal repl)

等等,但是如果我加载我的 sync.hs 脚本,我无法访问它的片段(同步中定义的函数)

我想看看上面定义的模式,例如:

我想使用 sync.hs 中定义的函数作为实验的快捷方式,例如。像这样

其次,您可能已经注意到,在上面的 turtle 脚本中,我在 echo 的情况下使用了“更惯用的”turtle:

IE。我正在使用海龟风格的管道:函数应用程序,这里与 & 的顺序相反,至少比 toDir 的情况更惯用,我实际上是依靠 bash 来完成这项工作:

但即使在这种更惯用的回声情况下,我也不得不求助于一些解决方法:grep(有“。”),如果我不使用它,我会看到空字符串:

输出(这里省略了很多输出,但在最后看到单个“\NUL”):

如果我不费心用 grep 删除它们(有“。”),请查看最后得到的空字符串

为什么是这样?在 bash 中我不必这样做!在乌龟中使用空终止字符串的任何更好/推荐的方法?

最后同样重要的是,我无法为另一段 rsync 代码想出一个惯用的海龟解决方案。这是一个尝试,但看看会发生什么:一些文件被传输,但 rsync 抱怨我当前的目录 /home/rx/work/servant/ 未找到空终止:link_stat "/home/rx/work/servant/# 012”失败:(是的:它的名字只是“/home/rx/work/servant/”而不是“/home/rx/work/servant/#012”)

但实际上我什至想将 inproc 用于 rsync 片段(有或没有 grep(有“。”))

提前致谢。

0 投票
1 回答
334 浏览

haskell - 使用 haskell 龟库运行交互式命令

我正在尝试使用这样的 haskell 龟库运行交互式命令:

(我也尝试过 shell 函数,但它也不起作用。)当我运行它时,什么也没有发生:

但是,如果我将“python”命令更改为“ls”,它就可以工作。

如何使用turtle库运行像python repl这样的交互式命令?

0 投票
0 回答
97 浏览

haskell - Forking Turtle inshell 命令不流式传输标准输出

我正在使用以下函数在我的 Turtle 脚本中派生命令:

这样做的原因是因为我想获得我正在运行的分叉进程的 PID。

问题是我正在破坏的命令没有流式传输任何标准输出。例如,您可以将 shellCommand 设置为:

你不会看到打印发生。

0 投票
0 回答
54 浏览

haskell - 使用 Turtle 脚本启动 GHCi

假设有一个海龟脚本,但不想运行它。有没有办法使用从脚本加载的所有函数来启动堆栈 ghci 环境?

0 投票
0 回答
144 浏览

haskell - 使用 Haskell 的 Turtle 调用自定义 Bash 函数

使用 turtle,如何运行在 中找到的自定义 bash 命令/a/path/to/a/file.sh?它相当于source /a/path/to/a/file.sh然后调用custom_bash_function.

0 投票
1 回答
59 浏览

haskell - 在 Haskell 中输出命令时保留 Bash 颜色

在 bash 中运行ls --color=auto在我的机器上将目录显示为蓝色。然而,stdout (inshell "ls --color=auto" empty)在 Turtle 中运行会丢失所有所说的颜色数据。有没有办法保存着色数据?

0 投票
2 回答
139 浏览

haskell - 从 Haskell 启动程序(例如:Vim)

使用Turtleshell 脚本库我正在尝试启动一个程序,即:

问题是这会产生警告Warning: Input is not from a terminal并导致 Vim 在最终启动之前延迟几秒钟。

问题:

  1. shell从haskell启动外部程序的最佳Turtle功能是什么?
  2. 如果是这样,有什么办法可以解决上述错误?