Ase*_*ore 54 bash shell scripting coffeescript
我既喜欢又讨厌写Bash.我喜欢它是如此简化操作文件和处理进程(我同意这个流行的问题,它在这方面比Python,Ruby等更好),但我讨厌语法,特别是在条件,循环等方面.
(这是主观的,但我发现它既令人困惑又烦人.例如,$var在阅读时,但var在写作时;如果周围有空格则静默写入; =使用正则表达式时ifs中的双括号;有时双分号和其他单分号;等等)
作为编写JS的CoffeeScript的忠实粉丝,我一直在想:是否有任何语言具有Python/Ruby/CoffeeScript等语言的美学/语法,但是编译和运行为Bash而不是其他运行时之一?
例如,我希望能够用更简单的语法编写Bash - Bash:
$AGGREGATE_FILENAME = 'allfiles.txt'
if not exists $AGGREGATE_FILENAME
touch $AGGREGATE_FILENAME
for $file in files/*
cat $file >> $AGGREGATE_FILENAME
switch $1
case 'test'
run-tests
echo 'Tests finished!'
case 'deploy'
echo 'Packaging...'
mv foo bar/
deploy-bar
Run Code Online (Sandbox Code Playgroud)
这是一个超级人为的例子,语法是一个稻草人(主要来自CoffeeScript,但保留了一流命令的基本Bash概念,与变量分开,松散打字).
无论如何,只是一个问题和思考的食物.我很喜欢到能写我的剧本比猛砸东西更好.=)谢谢!
Ase*_*ore 15
自从我最初提出这个问题以来,已经发布了两个攻击这个问题的项目并且做得很好.两者都在更多编程友好的运行时重新实现了许多/大多数Unix工具.
Plumbum是用Python实现的,看起来非常可靠:
http://plumbum.readthedocs.org/en/latest/index.html
ShellJS在Node.js上实现,看起来也很不错:
https://github.com/arturadib/shelljs
令人兴奋的发展!我很期待尝试一下.如果您已经拥有,那么在评论中听到您的经历会很棒.谢谢!
Bish是另一种选择:
https://github.com/tdenniston/bish
Shell脚本具有现代感.
Bish是一种轻量级语言,旨在将shell脚本带入21世纪.它为程序员提供了现代语法的舒适性,但编译为Bash,从而实现了良好的可移植性(就像Bash是可移植的一样).
小智 5
问题是Bash的整个基于字符串的语义是如此可怕地破坏,要做像Bash的CoffeeScript这样的事情是相当困难的.
由于您可能不需要函数级互操作性来调用用Bash编写的函数,因此最好使用完全不同的函数.Perl接近Bash是令人讨厌的,充满了快捷方式和奇怪的语法,但它的语义大多是合理的.Python对于诸如启动进程之类的东西不太舒服,但对于一般系统编程来说要好得多,干净且易于维护.Python拥有适用于所有内容的优秀库和模块; Perl甚至更好.
我最近开发了一种名为BashClass的语言,它是面向对象的,具有类型检查并允许多维数组。语言语法受到不同编程语言的启发。
下面是一个关于如何List实现类的示例(完整示例参见此处):
class List extends Object {
var Object[] data = new Object[];
var int size = 0;
constructor List(){
super_constructor();
}
function void add(var Object object) {
data[size] = object;
size = size + 1;
}
function void pop() {
if(size == 0) {
exception("Cannot remove element from an empty list");
}
size = size - 1;
data[size] = null;
}
function int size() {
return size;
}
function Object get(var int index) {
if(index < 0 || index >= size) {
exception("Cannot access element out of bound");
}
return data[index];
}
}
Run Code Online (Sandbox Code Playgroud)
BashClass 中的类和多维数组转换为 Bash 4.4 关联数组。该语言是第一个版本,并且在Github上开源。请随意贡献和建议功能。
| 归档时间: |
|
| 查看次数: |
6974 次 |
| 最近记录: |