2010-08-11 168 views
1

是否有任何提供脚本语言shell的软件包或项目?我知道C程序员有csh,但不是说它主要是用于编程,而是用于导航和系统管理。我想知道是否有为此目的倒过来的东西?即用户登录到主要用于编程然后进行导航的shell中(像ruby中的irb,但具有导航功能)?脚本语言shell?

+0

[Csh编程被认为是有害的](http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) – 2010-08-11 06:09:55

回答

4

如果你认为csh(tcsh)是C程序员的话,我认为你会误解。它只是一个像bash或ash或短跑或ksh或zsh的外壳。

R语言提供了一个功能合理的内部环境,并具有保存/恢复“工作空间”(变量)的能力。

Python有一个内置的解释器,就像Maxima和一些Lisp/Scheme版本,再加上你已经提到的irb。

您还可以查看vim或emacs作为您正在讨论的以程序员为中心的shell类型;两者都可以连接起来运行导航命令和系统管理员类型的东西,而不会让你离开编辑器。

我认为你的问题的真正答案是“强大的炮弹提供自己的脚本语言”。

0

CSH与C编程无关。它的功能与Bourne Shell相同,但使用不同的语法。

如果你想C解释器,我建议使用cint,它是CERN's ROOT系统的一部分。但请记住,这对系统管理和导航毫无用处。

0

我敢肯定,有工作的一点点,你可以进一步延伸Devel::REPL(Perl的),以提供对GNU的coreutils,

1

系统导航(和管理任务)是不是编程一个非常不同的应用,它的很难找到一个既能兼顾效果的单壳。不过,我猜你实际上要求的是

  1. 让您轻松地将一个文件的内容和进程,并与更灵巧操纵这些内容比你开始使用bash和壳标准的Unix工具。
  2. 此外,您需要方便地访问一些用于移动文件和浏览文件系统的常规命令。

好消息是,标准脚本语言(例如Ruby,Perl)确实要做好#1,编写/查找库来执行#2任何这些语言都不难。

因为Ruby是我所熟悉的,所以我将给你一个更具体的例子,说明如何使用Ruby来完成此操作。

要在Ruby中执行此操作,您需要使用irb(Ruby REPL)和FileUtils模块,它是Ruby标准库的一部分。

要做到这一点,开始irb,然后运行

require 'fileutils' 
include FileUtils 

(你可以把这个.irbrc,如果你想,但我不知道我会建议。)

这允许您通过简单的Ruby语法访问a number of the normal file manipulation commands。你可以自己运行其他的Ruby命令。要在系统上运行其他命令,您必须使用system来调用它们。

FileUtils不包含ls命令,因为它并不真正用于交互式使用,因此您需要编写自己的命令。我不知道一个办法来控制好工作(但这并不是说你不能写东西)。

我警告你的唯一的事情是,这个工作流程将是非常比其他UNIX用户的不同,所以你可能要考虑是这样一个不墨守成规是值得的,还是你宁愿建立的经验,目以及其他UNIX管理员的工作风格。习惯核心UNIX使用程序和Bourne shell脚本语言可能会更好。 (如果你愿意,你可以学习C-Shell,但有一个知名的常见问题解释the disadvantages of the C-shell for programming。)

+0

您应该花时间学习bash或zsh,然后再决定它们是什么对于大部分时间你想做的事情来说都不够强大。 – 2010-08-11 04:27:50

1

你可能想看看IPython。它是一个交互式的Python shell(带有文件系统导航以及其他很好的功能),它还提供了一个system shell profile来优化其系统外壳使用的行为。

0

Bash有很多通常不会被确认的编程功能,例如扩展shell变量时的数组和字符串操作选项。与最常见的shell(即bash或tcsh)相比,某些shell(如zsh或ksh)已大大改进了编程功能。

+1

我不认为一点都不清楚ksh与Bash相比已经大大改进了编程功能。他们有很多共同点,他们每个人都有另一个缺乏的功能。 – 2010-08-11 06:11:48

1

Tcl的解释程序tclsh实际上设计为shell。实际上,与交互式和非交互式shell分离的Ruby不同,tclsh与传统shell如bash一样工作:如果在没有脚本的情况下运行,它将进入交互模式,但是脚本会进入批处理模式。

但是,它确实吸引它没有内置readline。因此,没有向上箭头史或制表符完成等,但你总是可以使用rlwrap运行:

rlwrap tclsh 

这应该给你的ReadLine能力。

但是,我并不满意(部分原因是因为我当时的系统没有rlwrap,部分原因是我还需要更多功能)。所以我写了自己的历史记录和制表符完成等实现。请检查我原来的​​3210或改进的Pure-tcl readline2

如果tcl命令未知,它确实会像交互式shell一样完成自动执行外部可执行文件。你甚至可以执行交互式程序,如vi,emacs或lynx。因为它会自动回落到执行外部命令,你可以混合TCL和外壳,如:

foreach x [split [ps aux | grep apache] \n] { 
    puts [lindex $x 1] 
} 

,因为TCL的语法更加健壮相比bash和SH这是伟大的(曾经试图摆脱'"\"\\\\"\报价地狱抨击?)。我个人喜欢tcl,但tcl是一种爱它或恨的语言。得到它的人真的很喜欢它,而那些并不真正讨厌它的人。

但即使你不太喜欢tcl语法,我建议你试试这个特定的应用程序,因为与其他语言不同,tcl确实被设计为比编程语言更多地用作命令语言。由于一些原因,请阅读I can’t believe I’m praising Tcl