用过Unix/Linux的童鞋都不会对#!/bin/sh感到陌生。我们都知道sh是shell的解释器的意思。但是对于解释器这东西就感到很神秘。其实解释器就是一个可执行的文件而已,我们也能够自己建造一个简单的解释器。
1)建立echoarg.c。
#include "apue.h"
int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) /* echo all command-line args */ printf("argv[%d]: %s\n", i, argv[i]); exit(0); }2)编译echoarg.c为echoarg。
3)建立callEchoarg.e文件。
这个文件的第一行说明使用/home/Daniel/apue.2e/echoarg作为解释器解释本文件的代码。
4)运行出结果。
结果分析:由于对于解释器echoarg来说,其作用就是返回所有的参数。
使用#!标示的文件第一行,其实就是调用exce函数执行可执行文件echoarg和其参数,然后就是exce的参数。由于在上图中是直接运行./callEchoarg.e,所以只有excel("./callEchoarg.e",null)(此处表达只用于理解,看官莫较真,如果有读者知道确切的运行方式请指正,不胜感激!)。
由于调用了可执行文件/home/Daniel/apue.2e/echoarg,这相当于直接执行/home/Daniel/apue.2e/echoarg,所以/home/Daniel/apue.2e/echoarg是第一个参数,而其后紧跟的foo是第二个参数。这时才轮到./callEchoarg.e文件作为参数(此处不甚理解,待补充)。
以上就是自建简单解释器的过程以及运行时参数情况的说明。欢迎指正。