标题几乎说明了一切。我使用clojure作为我的主要项目,但它不是一个好的脚本语言,因为jvm启动缓慢,并且不能很好地与一些unixy事物接口。所以我正在寻找一种能够很好地用作脚本语言的lisp,例如具有良好的界面来管理unix进程,轻松使用async io等等。
答案 0 :(得分:14)
Scsh(代表“Scheme shell”)可以在http://www.scsh.net获得。它是“Scheme 48(符合R5RS的新技术方案系统)的变体......旨在编写真实的独立Unix程序和shell脚本。”
可以在http://www.theillien.com/Sys_Admin_v12/html/v11/i01/a2.htm找到有关系统管理的精彩介绍。
答案 1 :(得分:9)
各种常见的unix工具都具有Guile的绑定。如果您的目标是自动化这些工具,那么这可能是个不错的选择。
答案 2 :(得分:8)
Racket是一个非常好的Scheme实现。它非常强大。其中一个介绍是从头开发Web服务器。
答案 3 :(得分:7)
答案 4 :(得分:4)
CLISP是Common Lisp的一个实现,对Unix脚本很有用。
CLISP有许多扩展,使其对脚本有用:Unicode支持,正则表达式,各种命令行选项,套接字流,管道,......
此外,CLISP的占用空间相对较小,用C语言编写,便于携带并快速启动 - 用于Common Lisp。
答案 5 :(得分:1)
使用Elisp进行交互式使用的Eshell:
“Eshell能够调用几乎所有在Emacs中加载的elisp函数。这种灵活性是无与伦比的;没有任何shell能够逼近Eshell可以做的事情。事实上,这个功能被大量使用(并鼓励!如果你想在Emacs中打开文件foobar.txt,你只需调用find-file foobar.txt,然后Eshell会将它映射到elisp调用(find-file“foobar.txt”)并为你打开文件。 。“
来自http://www.masteringemacs.org/articles/2010/12/13/complete-guide-mastering-eshell/
答案 6 :(得分:1)
我在这个页面上跑了几次,同时寻找一种很好的方法将一些越来越多的unweildy bash脚本移植到一个更健全的语言中。由于这些脚本已经调用了一些Racket脚本,因此删除一层间接并将Racket用于所有内容是有意义的。
经过一番搜索,我偶然发现了Racket的shell-pipeline包。来自文档:
该库使外部程序和球拍功能的unix风格管道变得容易。您可以像
(run-pipeline '(cat /etc/passwd) '(grep root) '(cut -d : -f 1))
一样简单地编写内容,它会将"root\n"
打印到stdout(在unix系统上)并返回0
。要将输出作为字符串,请以相同的方式使用run-pipeline/out
。您还可以将球拍功能放入管道中。如果您的grep
球拍实施名为my-grep
,则可以(run-pipeline '(cat /etc/passwd) `(,my-grep root) '(cut -d : -f 1))
获得相同的结果。因此,您可以在Racket中编写各种过滤器函数,而不是使用shell命令。