是否有提供脚本语言shell的软件包或项目?我知道有C程序员的csh,虽然从某种意义上说它不是主要用于编程,而是用于导航和系统管理。我想知道为此目的是否有倒置的东西?即用户登录到主要用于编程然后用于导航的shell(类似于ruby中的irb,但具有导航功能)?
答案 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
好消息是标准的脚本语言(例如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)大大改进了编程功能。