查看“︁UNIX® Shell之间的最终差异”︁的源代码
←
UNIX® Shell之间的最终差异
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
本教程正在编写中(work in progress,WIP)。 === 介绍 === 本教程中介绍的 UNIX shell 包括:osh(Thompson shell 的移植)、sh(和类似 sh 的 shell)、csh(和类似 csh 的 shell)以及其他 shell。 各种 UNIX shell 之间有哪些重要的区别和/或相似之处?不同之处一般是命令行语法问题。 在下面的章节中,每个命令行示例都用 "Ecl [123]: "表示。比较每节中的 "Ecl [123]: "和其他章节中相应的 "Ecl [123]:",就能了解这些 shell 的不同之处 本教程中描述的各种UNIX shell之间的共同点比差异更为重要。这是因为当你学会使用一种shell时,实际上也学会了使用其他shell。从用户的角度来看,每种shell都扮演着相同的角色。这个角色就是作为UNIX操作系统中可用功能的接口。 === Thompson Shell === 在UNIX历史中,Thompson shell 早于 Bourne shell 和 C shell 出现,其命令语言是这两种壳的子集。Thompson shell 的流程控制通过外部壳工具if(1)和goto(1)实现。然而,Bourne shell 和 C shell 的流程控制则内置于各自的壳中。 增强版的Thompson shell已在SDF上提供,路径为`<code>/usr/pkg/bin/osh</code>`。您可以在命令提示符下执行`<code>man osh</code>`来查看其手册。如果您更喜欢在线阅读,也可以访问其[http://v6shell.org/man/osh.1.html 在线手册]。<syntaxhighlight lang="shell"> Ecl 1: % setenv PATH /usr/pkg/bin:/usr/bin:/bin ; printenv PATH /usr/pkg/bin:/usr/bin:/bin Ecl 2: % which osh if goto ^ ( tr '\n' ' ' ; echo ) ^ sed 's/.*/ls -l &/' ^ osh -r-xr-xr-x 1 root wheel 7880 Jul 18 21:37 /usr/pkg/bin/goto -r-xr-xr-x 1 root wheel 14160 Jul 18 21:37 /usr/pkg/bin/if -r-xr-xr-x 1 root wheel 38216 Jul 18 21:37 /usr/pkg/bin/osh Ecl 3: % if -r /netbsd echo /netbsd: Is readable ; \ if -w /netbsd echo /netbsd: Is writable /netbsd: Is readable </syntaxhighlight>... 请注意,上述的 `<code>setenv</code>` 命令在原始的 Thompson 壳中不可用。这是 '''osh''' 增强功能之一。我们是否需要对 PWB shell<ref>此 PWB shell 也是Thompson Shell 的改进。 --译者注</ref> 说些什么? === Bourne Shell === 这包括原始Bourne shell、衍生版本以及类似实现。真正的Bourne shell或类Bourne shell通常作为大多数UNIX系统上的标准命令解释器。 在SDF上,有一个与Bourne shell类似的命令行解释器,其路径为`<code>/bin/sh</code>`。您可以在命令提示符下输入`<code>man sh</code>`来查看其手册。如果您更喜欢在线阅读,也可以通过[http://netbsd.gw.com/cgi-bin/man-cgi?sh+1.alpha+NetBSD-2.1 在线方式]查看其手册。<syntaxhighlight lang="shell"> Ecl 1: $ PATH=/usr/pkg/bin:/usr/bin:/bin ; export PATH ; printenv PATH /usr/pkg/bin:/usr/bin:/bin Ecl 2: $ ls -l `which sh ksh bash` -r-xr-xr-x 1 root wheel 298431 Oct 24 2005 /bin/ksh -r-xr-xr-x 1 root wheel 199717 Oct 24 2005 /bin/sh -rwxr-xr-x 1 root wheel 963696 Jun 4 08:57 /usr/pkg/bin/bash Ecl 3: $ if test -r /netbsd ; then echo /netbsd: Is readable ; fi ; \ > if test -w /netbsd ; then echo /netbsd: Is writable ; fi /netbsd: Is readable </syntaxhighlight> === Bourne-Again Shell === Bourne-Again shell(Bash)是为GNU项目开发的自由软件,旨在替代Bourne shell。Bash能够在不进行任何修改的情况下执行绝大多数Bourne shell脚本。然而,其语法包含许多在Bourne shell中不存在的扩展功能。 Bourne-Again shell 在 SDF 上可通过 `<code>/usr/pkg/bin/bash</code>` 访问。您可以在命令提示符下执行 `<code>man bash</code>` 命令来查看其手册。<syntaxhighlight lang="shell"> Ecl 1: $ PATH=/usr/pkg/bin:/usr/bin:/bin ; export PATH ; printenv PATH /usr/pkg/bin:/usr/bin:/bin Ecl 2: $ ls -l `which sh ksh bash` -r-xr-xr-x 1 root wheel 298431 Oct 24 2005 /bin/ksh -r-xr-xr-x 1 root wheel 199717 Oct 24 2005 /bin/sh -rwxr-xr-x 1 root wheel 963696 Jun 4 08:57 /usr/pkg/bin/bash Ecl 3: $ if test -r /netbsd ; then echo /netbsd: Is readable ; fi ; \ > if test -w /netbsd ; then echo /netbsd: Is writable ; fi /netbsd: Is readable </syntaxhighlight> === Z Shell === Z shell(Zsh)是Bourne shell的扩展版本,包含了许多改进。Paul Falstad于1990年在普林斯顿大学编写了Zsh的第一个版本。 Z shell在SDF上可通过`<code>/usr/pkg/bin/zsh</code>`访问。您可以在命令提示符下执行`<code>man zsh</code>`来阅读其手册。<syntaxhighlight lang="shell"> Ecl 1: % PATH=/usr/pkg/bin:/usr/bin:/bin ; export PATH ; printenv PATH /usr/pkg/bin:/usr/bin:/bin Ecl 2: % ls -l `which csh tcsh zsh` -r-xr-xr-x 1 root wheel 214333 Oct 24 2005 /bin/csh -r-xr-xr-x 1 root wheel 459408 Jun 29 2005 /usr/pkg/bin/tcsh -r-xr-xr-x 2 root wheel 6352 May 11 2007 /usr/pkg/bin/zsh Ecl 3: % if test -r /netbsd ; then echo /netbsd: Is readable ; fi ; \ > if test -w /netbsd ; then echo /netbsd: Is writable ; fi /netbsd: Is readable </syntaxhighlight> === C Shell === 这包括原始的C shell、衍生版本以及类似实现。 C shell在SDF上以`<code>/bin/csh</code>`的形式提供。您可以在命令提示符下执行`<code>man csh</code>`来查看其手册。如果您更愿意在线查看,也可以[http://netbsd.gw.com/cgi-bin/man-cgi?csh+1.alpha+NetBSD-2.1 通过网络]阅读其手册。<syntaxhighlight lang="shell"> Ecl 1: % setenv PATH /usr/pkg/bin:/usr/bin:/bin ; printenv PATH /usr/pkg/bin:/usr/bin:/bin Ecl 2: % ls -l `which csh tcsh zsh` -r-xr-xr-x 1 root wheel 214333 Oct 24 2005 /bin/csh -r-xr-xr-x 1 root wheel 459408 Jun 29 2005 /usr/pkg/bin/tcsh -r-xr-xr-x 2 root wheel 6352 May 11 2007 /usr/pkg/bin/zsh Ecl 3: % if (-r /netbsd) echo /netbsd: Is readable ; \ if (-w /netbsd) echo /netbsd: Is writable /netbsd: Is readable </syntaxhighlight> === 其他 Shells === 这一部分是否必要? 本部分将包含关于Z shell、rc(AT&T Plan 9 shell)以及任何其他无法明确归类到单一类别的UNIX shell的相关信息。 === 结论 === 结合前文内容,进一步探讨差异与相似之处。需要特别注意的是,尽管存在差异……但我认为相似性更为重要。毕竟,正是这些相似性使得用户能够轻松地在不同终端之间切换。 ----UNIX® 是 The Open Group 的注册商标。 ''<small>$Id: shells.html,v 1.3 2021/06/17 22:55:38 brainman Exp brainman $</small>'' ---- 注释: <references />
返回
UNIX® Shell之间的最终差异
。
导航菜单
个人工具
中文(中国大陆)
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息