Chinaunix

标题: 内建命令,shell函数以及外部命令 [打印本页]

作者: hardie    时间: 2010-01-22 16:15
标题: 内建命令,shell函数以及外部命令
shell 识别三种基本命令:内建命令,shell函数以及外部命令:

内建命令就是由shell本身所执行的命令
shell函数是功能健全的一系列程序代码,以shell语言写成,它们可以像命令那样引用。
外部命令就是有shell的副本(新的进程)所执行的命令

这个定义是如何理解的,是不是外部命令会重新启动一个shell,而内部命令不会启动shell?
外部命令ls,内部命令cd
作者: LonnyHe    时间: 2010-01-22 16:38
当一个命令或者是shell本身需要初始化(或者创建)一个新的子进程来执行一个任务的时候, 这种行为被称为fork. 这个新产生的进程被叫做子进程, 并且这个进程是从父进程中fork出来的. 当子进程执行它的任务时, 父进程也在运行.
通常情况下, 脚本中的Bash内建命令在运行的时候是不会fork出一个子进程的. 但是脚本中的外部或者过滤命令通常会fork出一个子进程.

这是我的理解,不知道对不。
作者: hardie    时间: 2010-01-22 16:59
标题: 回复 #2 LonnyHe 的帖子
你的意思是不是内建命令已经包含在shell中(已经在内存中了),键入内建命令之后就是跳转到那一段代码去执行,执行完毕在跳回来,而外部命令需要都磁盘上的文件,fork一个进程去执行,执行完毕退出。
作者: LonnyHe    时间: 2010-01-22 17:12
更准确一些的说法:

UNIX命令有内部命令和外部命令之分。内部命令实际上是shell程序的一部分,其中包含的是一些比较简练的UNIX系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在UNIX系统加载运行时shell就被加载并驻留在系统内存中。外部命令是UNIX系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以它们包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调进内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell 程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。
作者: nhw_cs    时间: 2010-01-22 17:21
原帖由 LonnyHe 于 2010-1-22 17:12 发表
更准确一些的说法:

UNIX命令有内部命令和外部命令之分。内部命令实际上是shell程序的一部分,其中包含的是一些比较简练的UNIX系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在UNIX系统 ...


"其中包含的是一些比较简练的UNIX系统命令",  就冲这个, 就知道这句话的作者是半瓶子水. 包括有些图书的作者(特别是国内的), 水平真不咋的。
我告诉你, 很多command 之所以实现为built-in, 不是因为简洁, 而是必须如此, 否则(如果实现为外部命令)就不能实现预期的功能, 如cd, export ...很多很多
作者: hardie    时间: 2010-01-22 17:56
标题: 回复 #5 nhw_cs 的帖子
为什么cd必须是内建命令,是不是shel启动是要使用?还是要通过shell访问linux内核的结构 以及类似的内建命令,请赐教,详细说明一下。谢谢。

bash Builtin commands
http://www.gnu.org/software/bash ... ll-Builtin-Commands
作者: mseaspring    时间: 2010-01-23 10:29
我是来学习的。。。。
作者: butting    时间: 2010-02-03 09:54
内建命令有些事必须的(比如cd,比如read),有些是为了效率(比如test),内建命令由Shell本身执行
外部命令是shell打开的新进程
作者: ouyangshaowen    时间: 2010-02-03 10:08
很高深啊
作者: blackold    时间: 2010-02-03 10:15
不是内部命令的cd相当于没有子宫的女人。
作者: ywlscpl    时间: 2010-02-03 10:20

作者: iori809    时间: 2010-02-03 10:38
可以用 type -t  命令  来查看是否是内置命令还是外置命令。不过还有一种是KEYWORD就是关键字。比如]]就是关键字。
作者: waker    时间: 2010-02-03 10:44
"其中包含的是一些比较简练的UNIX系统命令",  就冲这个, 就知道这句话的作者是半瓶子水. 包括有些图书的 ...
nhw_cs 发表于 2010-01-22 17:21

也不一定啊,进程间不是还可以通信么?虽然cd内置实现方便,也不是没有可能用外部命令实现
作者: 芬达7402    时间: 2011-10-21 11:25
顶上去!基本概念讲的挺好大家都来看看




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2