0

我一直在寻找IronPython项目和Orchard CMS项目的源代码。 IronPython使用名为Microsoft.Scripting.Hosting.Shell的名称空间(DLR的一部分)运行。 Orchard项目也在各种接口(IShellContainerFactory,IShellSettings)中间接操作'shell'的概念。'shell'的角色/职责是什么?

上面提到的任何项目都没有详细的文档,因此如果您想通过阅读源代码来弄清楚整个应用程序结构/体系结构,那么从其名称中提取类型(类等)的含义非常有价值码。

现在我想知道:当源代码引用'shell'时,这个源代码的作者有什么想法?当我听到'shell'这个词时,我想起了一个类似于命令行解释器的东西。这对IronPython很有意义,因为它有一个交互式解释器。但对我来说,对于Web CMS来说没有什么意义。

当我遇到一种叫'壳'的东西时,我该怎么想?一般而言,“壳”的作用和责任是什么?这个问题甚至可以回答吗? “壳”的含义是主观的(使这个术语无用)?

谢谢。

回答

1

我认为shell的一般含义是'解释和执行命令的用户进程'。

  1. 用户进程”:从内置到操作系统内核的处理为不同的。 IBM大型机领域的JCL将难以算作一个shell。

  2. 解释并执行”:在一些形状或形式,壳从文件中读取或一个终端的命令,并反应所显示的内容,而不是被刚性地编程以执行指令的特定序列。

  3. '命令:这些命令取决于上下文。在标准的Unix shell中,执行的命令主要是其他程序,shell将它们适当地链接在一起。显然,有内置命令,并且通常还有流控制语法,以允许对执行命令的结果作出适当的反应。

在其他上下文中,考虑执行其他类型的命令是合理的。例如,可以设想一个'SQL Shell',它允许用户在连接到数据库时执行SQL语句。

Python shell将支持Pythonic符号并执行类似Python的语句,其语法与Python的语法密切相关。 Perl Shell可以支持类似Perl的符号,并且可以执行类似Perl的语句......所以这个列表继续下去。 (例如,Tcl有tclsh - Tcl Shell。)

2

在Orchard中,术语“shell”实际上更多地是一个范围的隐喻。有三个嵌套的作用域:主机,外壳和工作。

主机是在Web应用程序域期间生存的单个容器。

shell是由根据当前配置构建的主机创建的子容器。如果配置发生变化,则会建立一个新的外壳,而现有的外壳将被释放。

该工作是另一个由shell创建的容器,用于容纳在单个请求期间存活的组件。

使用shell容器的一个好处是它有助于避免使用静态变量,并且在配置更改时需要循环使用应用程序域。另一个好处是,它使得Orchard应用程序域可以在主持人拥有多个shell并为每个请求使用适当的一个shell的同时为多个“site”提供服务。