什么是Bash Shell的内建(build in)命令

1.什么是build in命令:

shell内建命令是指bash(或其它版本)工具中集成的命令。一般都会有一个与之同名的系统命令,比如bash中的echo命令与/bin/echo是两个不同的命令,尽管他们行为大体相仿。当在bash中键入一个命令时系统会先看他是否是一个内建命令,如果不是才会查看是否是系统命令或第三方工具。所以在bash中键入echo命令实际上执行bash工具集中的bash命令也就是内建命令,而不是/bin/echo这个系统命令。
 

2.内建命令与系统命令
 
内建命令要比系统论命令有比较高的执行效率。外部命令执行时往往需要fork出(产生出)一个子进程,而内建命令一般不用。下面(或许以后还会有)这一篇文章将介简bash的内建命令。

3.查看一个命令是系统命令还是内建命令:type
 
[email protected]:~/Documents
 $ type -a pwd
 pwd is a shell builtin
 pwd is /bin/pwd
 
[email protected]:~/Documents
 $ type -a echo
 echo is a shell builtin
 echo is /bin/echo
 

可以看出,有些命令,echo和pwd同时是内建命令和系统命令。

4.常见命令的类型 


[root@linuxidc ~]# type -a cd 

cd is a shell builtin
 [root@linuxidc ~]# type -a pwd 
 pwd is a shell builtin
 pwd is /bin/pwd
 [root@linuxidc ~]# type -a time 
 time is a shell keyword
 time is /usr/bin/time
 [root@linuxidc ~]# type -a date 
 date is /bin/date
 [root@linuxidc ~]# type -a which 
 which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
 which is /usr/bin/which
 [root@linuxidc ~]# type -a whereis 
 whereis is /usr/bin/whereis
 [root@linuxidc ~]# type -a whatis 
 whatis is /usr/bin/whatis
 [root@linuxidc ~]# type -a function 
 function is a shell keyword
 [root@linuxidc ~]# type -a ls 
 ls is aliased to `ls --color=tty'
 ls is /bin/ls
 [root@linuxidc ~]# type -a ll 
 ll is aliased to `ls -l --color=tty'
 [root@linuxidc ~]# type -a echo 
 echo is a shell builtin
 echo is /bin/echo
 [root@linuxidc ~]# type -a bulitin 
 -bash: type: bulitin: not found
 [root@linuxidc ~]# type -a builtin 
 builtin is a shell builtin
 [root@linuxidc ~]# type -a keyword 
 -bash: type: keyword: not found
 [root@linuxidc ~]# type -a command 
 command is a shell builtin
 [root@linuxidc ~]# type -a alias 
 alias is a shell builtin
 [root@linuxidc ~]# type -a grep 
 grep is /bin/grep
 [root@linuxidc ~]#


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表示成功非零表示失败,虽然内建命令不创建新的进程,但执行结束后也会有一个状态码,也可以用特殊变量$?读出




你可能感兴趣的:(什么是Bash Shell的内建(build in)命令)