免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7753 | 回复: 13
打印 上一主题 下一主题

内建命令,shell函数以及外部命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-22 16:15 |只看该作者 |倒序浏览
shell 识别三种基本命令:内建命令,shell函数以及外部命令:

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

这个定义是如何理解的,是不是外部命令会重新启动一个shell,而内部命令不会启动shell?
外部命令ls,内部命令cd

论坛徽章:
0
2 [报告]
发表于 2010-01-22 16:38 |只看该作者
当一个命令或者是shell本身需要初始化(或者创建)一个新的子进程来执行一个任务的时候, 这种行为被称为fork. 这个新产生的进程被叫做子进程, 并且这个进程是从父进程中fork出来的. 当子进程执行它的任务时, 父进程也在运行.
通常情况下, 脚本中的Bash内建命令在运行的时候是不会fork出一个子进程的. 但是脚本中的外部或者过滤命令通常会fork出一个子进程.

这是我的理解,不知道对不。

论坛徽章:
0
3 [报告]
发表于 2010-01-22 16:59 |只看该作者

回复 #2 LonnyHe 的帖子

你的意思是不是内建命令已经包含在shell中(已经在内存中了),键入内建命令之后就是跳转到那一段代码去执行,执行完毕在跳回来,而外部命令需要都磁盘上的文件,fork一个进程去执行,执行完毕退出。

论坛徽章:
0
4 [报告]
发表于 2010-01-22 17:12 |只看该作者
更准确一些的说法:

UNIX命令有内部命令和外部命令之分。内部命令实际上是shell程序的一部分,其中包含的是一些比较简练的UNIX系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在UNIX系统加载运行时shell就被加载并驻留在系统内存中。外部命令是UNIX系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以它们包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调进内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell 程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。

论坛徽章:
0
5 [报告]
发表于 2010-01-22 17:21 |只看该作者
原帖由 LonnyHe 于 2010-1-22 17:12 发表
更准确一些的说法:

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


"其中包含的是一些比较简练的UNIX系统命令",  就冲这个, 就知道这句话的作者是半瓶子水. 包括有些图书的作者(特别是国内的), 水平真不咋的。
我告诉你, 很多command 之所以实现为built-in, 不是因为简洁, 而是必须如此, 否则(如果实现为外部命令)就不能实现预期的功能, 如cd, export ...很多很多

论坛徽章:
0
6 [报告]
发表于 2010-01-22 17:56 |只看该作者

回复 #5 nhw_cs 的帖子

为什么cd必须是内建命令,是不是shel启动是要使用?还是要通过shell访问linux内核的结构 以及类似的内建命令,请赐教,详细说明一下。谢谢。

bash Builtin commands
http://www.gnu.org/software/bash ... ll-Builtin-Commands

论坛徽章:
0
7 [报告]
发表于 2010-01-23 10:29 |只看该作者
我是来学习的。。。。

论坛徽章:
0
8 [报告]
发表于 2010-02-03 09:54 |只看该作者
内建命令有些事必须的(比如cd,比如read),有些是为了效率(比如test),内建命令由Shell本身执行
外部命令是shell打开的新进程

论坛徽章:
0
9 [报告]
发表于 2010-02-03 10:08 |只看该作者
很高深啊

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
10 [报告]
发表于 2010-02-03 10:15 |只看该作者
不是内部命令的cd相当于没有子宫的女人。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP