热度 15
2015-4-14 09:14
1215 次阅读|
1 个评论
解释器是什么? 是执行解释型语言的程序。 很多语言都是解释型语言,比如 Java 和 Python ,因此解释器也有很多种。 执行 shell 语言的解释器: /bin/bash /bin/sh 解释器文件是什么? 可以被解释器执行的文件,比如 shell 脚本。 这是一个非常简单的 shell 解释器文件(俗称 shell 脚本): #!/bin/bash echo "Shell start." 执行它: $ ./shell.sh Shell start. 再来一个普通的编译型文件 ( 俗称 .c 文件 ) : #include int main(int argc, char *argv $ gcc test.c -o test $ ./test Test start. 那它们有什么区别呢? 当执行解释器文件的时候,并不是执行这个文件本身,而是执行 /bin/bash 。 当执行编译型文件的时候,就是执行文件本身。 内核调用 exec 处理的方式也是由区别的,下面两个 exec 调用的打印结果也是一样的: execlp("./test", "", (char *)0); execlp("./shell.sh", "", (char *)0); NOTE :执行 execlp 完毕后会跳出执行它的进程,所以这两个函数需要放置在不同的子进程中,或者写成: if ((pid = fork()) 0) perror("Cannot fork child 1."); else if (pid == 0) execlp("./test", "", (char *)0); if ((pid = fork()) 0) perror("Cannot fork child 2."); else if (pid == 0) execlp("./shell.sh", "", (char *)0); 解释器文件不一定是调用 bash ,也可以使用任意程序,比如: #!/home/maria/maria_work/workon_fedora/programs/primer-unix/test 1 2 3 echo "Shell start." 如果 test 里面加入了打印参数列表的功能,那么它的输出结果会是这样: $ ./shell.sh a b c Test start. argv = /home/maria/maria_work/workon_fedora/programs/primer-unix/test argv = 1 2 3 argv = ./shell.sh argv = a argv = b argv = c 解释器文件的使用方法,比如它的参数列表排列、被 exec 调用时的特点等等,非常有意思。 It's very interesting!