问题标签 [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.
haskell - Haskell Turtle - 拆分壳
是否可以在 Turtle 库 (Haskell) 中拆分 Shell 并对 shell 的拆分执行不同的操作,以便原始 Shell 仅运行一次?
比如怎么做
这样 lstree "/tmp" 只会运行一次。
具体来说,我想使用输出将 Shell 2 和 Shell 3 发送到不同的文件。
haskell - 将字符串转换为 Turtle.FilePath
如何将连接的转换String
为 Turtle FilePath
?例如,以下程序尝试读取一些文本文件,将它们连接成一个新文件并删除旧文件。OverloadedStrings
尽管启用了扩展,但它似乎不起作用:
抛出的错误是:
切换到output "example.txt" concat
就可以了。不String
只是类型别名[Char]
吗?
haskell-turtle - 在同一目录下编译多个turtle脚本
虽然我可以在同一个目录中使用多个海龟脚本(例如已经解释了 pretty.hs 和 srv.hs),但我了解到我只能编译其中的一个。和
因为这也隐含地构建了 Main.o 和 Main.hi,并且 srv 和 pretty 显然需要两个不同的目标文件。
无论如何,Turtle 和 Main 模块的故事是什么:如果可以使用(并因此选择)一个模块名称,那不是更好吗,就像这样
我试图单独编译 .o 文件,但没有运气:
到目前为止没有投诉,但随后:
等等...
尽管如此,是否可以在同一个目录中编译两个不同的海龟脚本?如何?
谢谢。
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
要么只显示正在考虑的文件列表:sync.hs -e
或将它们同步到另一个目录,如下所示: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(有“。”))
提前致谢。
haskell - 使用 haskell 龟库运行交互式命令
我正在尝试使用这样的 haskell 龟库运行交互式命令:
(我也尝试过 shell 函数,但它也不起作用。)当我运行它时,什么也没有发生:
但是,如果我将“python”命令更改为“ls”,它就可以工作。
如何使用turtle库运行像python repl这样的交互式命令?
haskell - Forking Turtle inshell 命令不流式传输标准输出
我正在使用以下函数在我的 Turtle 脚本中派生命令:
这样做的原因是因为我想获得我正在运行的分叉进程的 PID。
问题是我正在破坏的命令没有流式传输任何标准输出。例如,您可以将 shellCommand 设置为:
你不会看到打印发生。
haskell - 使用 Turtle 脚本启动 GHCi
假设有一个海龟脚本,但不想运行它。有没有办法使用从脚本加载的所有函数来启动堆栈 ghci 环境?
haskell - 使用 Haskell 的 Turtle 调用自定义 Bash 函数
使用 turtle,如何运行在 中找到的自定义 bash 命令/a/path/to/a/file.sh
?它相当于source /a/path/to/a/file.sh
然后调用custom_bash_function
.
haskell - 在 Haskell 中输出命令时保留 Bash 颜色
在 bash 中运行ls --color=auto
在我的机器上将目录显示为蓝色。然而,stdout (inshell "ls --color=auto" empty)
在 Turtle 中运行会丢失所有所说的颜色数据。有没有办法保存着色数据?
haskell - 从 Haskell 启动程序(例如:Vim)
使用Turtle
shell 脚本库我正在尝试启动一个程序,即:
问题是这会产生警告Warning: Input is not from a terminal
并导致 Vim 在最终启动之前延迟几秒钟。
问题:
shell
从haskell启动外部程序的最佳Turtle功能是什么?- 如果是这样,有什么办法可以解决上述错误?