对话 UNIX: Squirrel--可移植的 shell 和脚本语言

1799 年,一名法国陆军工程师取得了一项重大发现 。不,不是鹅肝酱、卡门培尔奶酪、巴氏消毒法或沙特(Sartre)— 实际上,他发现了能够破译埃及古代象形文字的钥匙 —— 罗塞塔石碑(参见 图 1) 。
图 1. 罗塞塔石碑,1100 磅重,其上使用三国语言篆刻了税收策略 。碑文展示的是减免僧侣税款的诏书 。
这块石碑制作于公元前 196 年,篆刻了对同一段文字的三种不同语言版本 — 分别是象形文字、通俗体文字(埃及草书)和希腊文字 。通过对照翻译,或在不同语言版本之间寻找对应的词汇,罗塞塔石碑解读出已经失传已久的象形文字的含义 。
换句话说,将罗塞塔石碑想像成 Babelfish 。即使在公元前 196 年,就出现了使用一种以上的语言进行表达 。
公元 2000 年末,软件开发人员面对着一个相似的问题 。有太多的语言和方法可以用来表达同一内容 。即使对于命令行,也有许多类似的内容可供选择,包括各种 shell 和不同的命令组合 。
通常来讲,多样性是件好事,但是它也会让人觉得害怕 。应该选择哪种解决方案?这种技术是否能够跟上需求的变化?时间和精力方面的投入能否得到回报?这些编写良好的代码(或 Perl 代码)是否会过时?更糟糕的是,是否需要针对其他环境转换(重写)所有内容?
如果您不希望局限于 Fish shell、Bash shell、Z shell、Windows operating system 的 cmd.exe 或其他一些 shell 脚本语言的特性,那么请尝试使用 Squirrel Shell 。Squirrel Shell 提供了一种高级的、面向对象的脚本语言,在 Unix、Linux、Mac OS X 和 Windows 系统上都可以良好地运行 。您只需要编写一次脚本,就可以在任意平台上运行 。
更妙的是,您需要做的工作非常简单 。
获得 Squirrel
根据 GNU Public License version 3 (GPLv3) 的条款,Squirrel Shell 很容易获得并且可以免费使用 。最新的版本为 2008 年 10 月 11 日发布的 1.2.2 。Squirrel Shell 的创建者和维护者是 Constantin "Dinosaur" Makshin 。
Squirrel Shell 的下载页面(参见 参考资料)提供了针对 32 位和 64 位 Windows 的源代码和二进制代码 。如果您使用 Unix 或 Linux,请检查发行版附带的库,寻找合适的二进制文件或从头构建 Squirrel Shell 。
从头构建 Squirrel Shell 非常简单 。下载并提取源代码 tarball 文件,放到源代码目录,然后使用非常典型的构建 shell,如 清单 1 所示 。
清单 1. 从头构建 Squirrel Shell
 
$ ./configure --with-pcre=system && make && sudo make install 
Checking CPU architecture...x86 
Checking for install.../usr/bin/install 
... 
Configuration has been completed successfully. 
Build for x86 CPU architecture 
Installation prefix: /usr/local 
Allow debugging: no 
Build static librarIEs 
Use system PCRE 6.7 library 
Install MIME information: auto 
Create symbolic link: no 
Compile C code with 'gcc' 
Compile Ccode with 'g' 
Create static libraries with 'ar rc' 
Create executables and shared libraries with 'g' 
Install files with 'install'
要查找与包有关的选项列表以进行配置,需在命令行中输入 ./configure --help 。
为方便起见,Squirrel Shell 打包了 Perl Compatible Regular Expression (PCRE) 库的源代码,这些内容在程序中被大量使用 。如果系统缺少 PCRE,打包后的代码可以使构建变得简单快捷 。然而,如果系统已经有了 PCRE,那么可以通过指定 --with-pcre=system 选项来使用它 。另一种方法是指定 --with-pcre=auto 以链接到更新的系统库或 Squirrel Shell 的副本 。

推荐阅读