Ruby ruby 作为更好的 shell

linjunhalida · 2014年01月29日 · 最后由 linjunhalida 回复于 2014年01月31日 · 3341 次阅读

前段时间看过王垠关于 shell 的评论:http://blog.jobbole.com/25792/

觉得说的很有道理。本来结构化的输入输出,用文本的方式传递,增加了解析成本以及大量隐含 bug,是可以说是设计上面的败笔。

我在想,shell 本身应该是门语言,输入输出结构化,ruby 可以用来作为一个主要的载体。搜索了一下相关的工具,发现有:

所以我虚拟一个 ruby-shell:

普通操作:

$ ls
=> [
    ['a', 'b', 'c']
]

$ ls :l
=> [
    [888, 1, 'halida', 'staff', 1019, '2012-10-11 10:11:10', 'intro.md'],
    [888, 1, 'halida', 'staff', 1019, '2012-10-11 10:11:10', 'intro.md'],
    [888, 1, 'halida', 'staff', 1019, '2012-10-11 10:11:10', 'intro.md'],
]

$ pwd
=> ['home', 'halida', 'temp']

$ mkdir 'test'

$ cd 'test'
=> ['home', 'halida', 'temp', 'test']

$ cd '...'

$ touch 'a.txt', 'b.txt'

$ find '*.txt'
=> ['a.txt', 'b.txt']

管道:

$ io{echo "hello world"} > io{wc}
=> [1,3,11]

输入输出重导向:

$ io{ echo("yes and no") } > fio('/dev/null')

后台:

$ bgd{python module: 'SimpleHTTPServer'}

$ jobs
=> [1, :running, [:python, {module: 'SimpleHTTPServer'}]]

$ fg

特性:

  • 结构化的输入输出
  • 命令行工具函数化
  • 大家熟悉的 ruby 来写脚本

问大家一下看法。包括:

  • 这些特性大家觉得是否重要,对于 shell 使用会有很大的帮助?
  • 特性和 API 上面是否有更好的建议?
  • 如果有这样一个 shell,大家是否会使用?

像 chef 一样,或者说 GUI 一样在高层面上简化操作,项目推进上更具操作性。

重新发明是不是太难办了点。。。

#1 楼 @clc3123 好像我们说的不是一回事?

我肯定不会用 输入的字符数量大大增加了。Shell 虽然问题很多,但是人性化还是很有保障的,对 Shell 只能改良一些特性,减少因二异性出错的概率,但不能彻底用某个通用语言取代了事

我对 linux 底层不熟,所以要是 less 或是 vim 之类的东西跟这会相容吗?

#3 楼 @iBachue 当然会有工具节省掉信息冗余字符输入,显示上面的用深色隐藏掉不重要的信息。 如果是引号的话,我觉得一定要加,逻辑清晰要比节省键盘敲击重要。

shell 语言这么别扭,取代掉挺好的。

#4 楼 @lulalala 恩,terminal 模拟是个问题。

#3 楼 @iBachue 并且格式化的数据处理上好很多,日志格式化不知道消耗了多少人的精力。

我以前做过类似的项目,主要好玩。https://github.com/hayeah/rubish

我有段时间确实偶尔会用 IPython 做 shell……

只要够好用,我们会用的。

#2 楼 @linjunhalida 首先我不明白结构化是什么意思,再者对于函数化之于 shell 风格有什么优势也不明确 另外你说的日志格式化跟 shell 什么关系?

#11 楼 @clc3123 具体请看上面王垠的博客。

lz 还是先搞清楚为什么 shell 用文本传递,然后再来发明更好的 shell 吧

我觉得起码格式化上看得就很舒服,而且如果能加上高亮的阅读就舒服了。主要现在就算用上 zsh,shell 的命令对于某些输出结果也没用高亮。比如那个ls -l ,权限,用户,大小等信息,有时还不一定能对齐。

#13 楼 @liprais 怎么搞清楚?有什么论文分析为什么要用文本?

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