脚本语言shell?

时间:2010-08-11 03:49:20

标签: language-agnostic shell

是否有提供脚本语言shell的软件包或项目?我知道有C程序员的csh,虽然从某种意义上说它不是主要用于编程,而是用于导航和系统管理。我想知道为此目的是否有倒置的东西?即用户登录到主要用于编程然后用于​​导航的shell(类似于ruby中的irb,但具有导航功能)?

7 个答案:

答案 0 :(得分:4)

如果您认为csh(tcsh)适用于C程序员,我认为您会被误导。它只是一个像bash或ash或dash或ksh或zsh的shell。

R语言提供了一个功能合理的内部环境,能够保存/恢复“工作区”(您的变量)。

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

您还可以将vim或emacs视为您正在讨论的以程序员为中心的shell类型;两者都可以连接起来运行导航命令和sysadmin类型的东西,而不必强迫你离开编辑器。

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

答案 1 :(得分:1)

系统导航(和管理任务)是一个与编程完全不同的应用程序,并且很难找到一个兼容性好的单个shell。但是,我猜你真正要求的是一个shell

  1. 让您轻松加载文件内容并在进程中操作这些内容,并且比使用bash和标准unix实用程序更灵活。
  2. 此外,您还希望能够方便地访问一些用于移动文件和浏览文件系统的常规命令。
  3. 好消息是标准的脚本语言(例如Ruby,Perl)非常适合做#1,并且编写/找到一个库来做#2任何一个语言都不难。

    因为Ruby是我所熟悉的,所以我将为您提供一个更具体的示例,说明如何使用Ruby实现这一目标。

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

    为此,请启动irb,然后运行

    require 'fileutils'
    include FileUtils
    

    (如果您愿意,可以将其放在.irbrc中,但我不确定是否会推荐。)

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

    FileUtils不包含ls命令,因为它实际上不是以交互方式使用,因此您需要编写自己的命令。我根本不知道如何获得良好的工作控制(这并不是说你不能写一些东西)。

    我唯一警告你的是,这个工作流程非常与其他UNIX用户不同,所以你可能想要想到这样一个不符合规范的人是值得的,或者你是否愿意构建与其他UNIX管理员的工作风格很好地融合的体验。最好习惯核心UNIX utils和Bourne shell脚本语言。 (如果需要,您可以学习C-Shell,但有一个众所周知的FAQ解释the disadvantages of the C-shell for programming。)

答案 2 :(得分:1)

您可能需要查看IPython。它是一个交互式Python shell(文件系统导航以及其他不错的功能),它还提供system shell profile来优化其系统shell使用的行为。

答案 3 :(得分:1)

Tcl的解释器tclsh真的被设计成一个shell。事实上,与交互式和非交互式shell分离的Ruby不同,tclsh就像传统的shell一样工作:如果没有脚本运行它会进入交互模式,但是给定一个脚本它会进入批处理模式。

但是,它确实没有内置的readline。因此没有向上箭头历史记录或制表符完成等。但您始终可以使用rlwrap运行它:

rlwrap tclsh

应该为您提供readline功能。

然而,我并不满意(部分是因为我当时的系统没有rlwrap,部分原因是因为我想要更多功能)。所以我编写了自己的历史记录和标签完成等。查看我原来的Pure-tcl readline或改进后的Pure-tcl readline2

如果tcl命令未知,它确实像一个交互式shell,其中包含自动执行的外部可执行文件。您甚至可以从中执行vi,emacs或lynx等交互式程序。因为它会自动回退到执行外部命令,所以你可以将tcl和shell混合起来,如:

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

这很好,因为与bash和sh相比,tcl的语法更加清晰(曾试图在bash中引用'"\"\\\\"\引用地狱?)。我个人喜欢tcl,但tcl是一种爱或恨的语言。得到它的人真的很喜欢它,而那些不喜欢它的人。

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我确信通过一些工作,您可以进一步扩展Devel::REPL(Perl)以提供对gnu coreutils的访问,

答案 6 :(得分:0)

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