• 【转】shell中的内建命令, 函数和外部命令


    原文: http://www.cnblogs.com/xkfz007/archive/2011/10/13/2209571.html

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

    简单点说吧~~内部命令是指shell中的内置指令。并要需要安装就可以使用,默认情况下bash共有50几个内置命令。
    而外部命令与其相反,并不属于shell本身。并不一定有的系统中就有。而且有的可以通过软件包安装得到

    ----------------------------------------------------------------------------------

    Shell识别三种基本命令:内建命令、Shell函数以及外部命令:
    (1)内建命令就是由Shell本身所执行的命令。
       有些命令是由于其必要性才内建的,例如cd用来改变目录,read会将来自用户(和文件)的输入数据传给Shell外亮。
       另一种内建命令的存在则是为了效率,其中最典型的就是test命令,编写脚本时经常会用到它。另外还有I/O命令,例如echo于printf.
    (2)Shell函数是功能健全的一系列程序代码,以Shell语言写成,它们可以像命令那样引用。
    (3)外部命令就是由Shell副本(新的进程)所执行的命令,基本的过程如下:
       a. 建立一个新的进程。此进程即为Shell的一个副本。
       b. 在新的进程里,在PATH变量内所列出的目录中,寻找特定的命令。
          /bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin为PATH变量典型的默认值。
          当命令名称包含有斜杠(/)符号时,将略过路径查找步骤。
       c. 在新的进程里,以所找到的新程序取代执行中的Shell程序并执行。
       d. 程序完成后,最初的Shell会接着从终端读取下一条命令,和执行脚本里的下一条命令。

    使用type可以查看是否是内建命令:
      type (不带参数)会显示命令是内建命令还是外部命令
           -t :file 外部命令;alias 命令别名;builtin 内置命令
           -a :会将命令PATH路径显示出来
    如何执行交互式命令:
    用户在命令行输入命令后,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程.
    比如:cd、alias、umask、exit等命令即是内建命令,凡是用which命令查不到程序文件所在位置的命令都是内建命令,内建命令没有单独的man手册,要在man手册中查看内建命令,应该man bash-builtins,内建命令虽然不创建新的进程,但也会有Exit Status,通常也用0表示成功非零表示失败,虽然内建命令不创建新的进程,但执行结束后也会有一个状态码,也可以用特殊变量$?读出

  • 相关阅读:
    研究下
    linux 下wireshark安装与使用
    Spring优秀工具类Resource
    sunOS常用命令
    常用网站
    linux sar指令
    spring+quartz详解
    linux setenv 用法
    转hashmap非线程安全的解决办法
    gdb 调试core
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7647986.html
Copyright © 2020-2023  润新知