UNIX interpreter file

解释器文件

所有的UNIX系统都支持解释器文件。这种文件是文本文件,起始形式是:

1
#! pathname [optional-argument]

在感叹号和pathname之间的空格是可以选的。常见的解释器文件以下列行开始:

1
#! /bin/bash

pathname通常是绝对路径名,识别这种文件是exec系统调用处理的一部分。内核使调用exec函数的进程实际执行的并不是该解释器文件,而是在该解释器文件第一行中pathname指定的文件,即解释器。
解释器文件是文本文件,它以!#开头,而解释器是二进制文件,由解释器中的文件第一行的pathname指定。

解释器文件的好处

是否一定需要解释器文件呢?不完全如此,但是它们确实使得用户得到效率方面的好处,代价是内核的额外开销,因为识别解释器文件的是内核。由于下列原因,解释器文件是有用的:

  1. 有些程序是用某种脚本语言写的脚本,解释器文件可以将这一事实隐藏起来。
  2. 解释器脚本在效率方面提供了好处。
  3. 解释器脚本使我们可以使用除了/bin/sh以外的其他shell编写shell脚本。

参考文献

  1. 《APUE》第三版