Ruby 更好的命令行

linjunhalida · 2015年05月23日 · 最后由 qiukun 回复于 2015年07月30日 · 2221 次阅读

博客原文链接

命令行大家应该都熟悉了,但是命令行其实是很烂的, 输入和输出都采用字符串的方式,而不是一个规整的数据结构。 这样的后果是,每个程序都需要自己解析输入,以及提供一个特殊结构的输出, 很容易出现解析上面的问题。

从本质上面说,命令行就是一个函数执行的接口,终端就是一个状态机, 每一个命令就是一个函数。那么为什么不像通用的编程语言的函数一样来定义?

比如这样来写:

# 普通操作
$> date
=> "Sat May 23 09:18:38 CST 2015"
$> rm('/fdas/fdas/fda', directory: true, force: true)
=> true

# 输出结构化
$> ls
=> [{mode: 'drwxr-xr-x', user: 'halida', group: 'halida', size: 123, name: 'Gemfile.lock'}]
$> ls(columns: [:name, :size])
=> {name: 'Gemfile.lock', size: 123}

# 管道
$> history >> select{|row| row[:cmd] =~ /mina/ }
=> [cmd: {'mina init'}, run_at: '2014-02-01 10:00:21']
$> ls >> filter(:name)
=> ['Gemfile.lock']

# 很多命令应该用面向对象的方式来执行,更容易理解
$> master = git-get-commit('master')
$> master.files.count
=>3
$> master.committer
{name: 'James', email: '[email protected]'}

# 输出日志就算是以文字的方式体现,也最好结构化起来,方便解析
$> log = log("Process file (filename) finished, spend time (spendtime)", filename: "xxx.mov", spendtime: 220.seconds)
$> log.spendtime
=> 220.seconds

网上搜索了一下,看起来没有什么好的解决方案,大家怎么看?

powershell...

PowerShell...

看到 PowerShell 官网的这个图 之后,就开始怀疑它的品位了。

#2 楼 @rei 微软的那个?

用 irb 代替 bash?

类似还有:

更好的文件系统, 存对象而不是文件 更好的集成开发工具, 直接编辑对象的属性, 而不是源代码文本 更好的网络协议, 传输对象而不是流 ...

smalltalk 都做过

需要 登录 后方可回复, 如果你还没有账号请 注册新账号