【Bash百宝箱】shell内建命令之builtin、command、caller
1、builtin
在shell中,内建(builtin)命令builtin,格式如下:
builtin shell-builtin [arguments]
builtin命令用以执行shell的内建命令,既然是内建命令,为什么还要以这种方式执行呢?因为shell命令执行时首先从函数开始,如果自定义了一个与内建命令同名的函数,那么就执行这个函数而非真正的内建命令。
下面以shell内建命令umask为例说明:
$ umask
0002
$ umask() { echo "umask function"; }
$ umask
umask function
$ builtin umask
0002
$ unset -f umask
$ umask
0002
2、command
在shell中,内建(builtin)命令command,格式如下:
command [-pVv] command [arg ...]
command命令类似于builtin,也是为了避免调用同名的shell函数,命令包括shell内建命令和环境变量PATH中的命令。选项“-p”指定在默认的环境变量PATH中查找命令路径。选项“-v”和“-V”用于显示命令的描述,后者显示的信息更详细。
下面以命令ps(“/bin/ps”)为例说明:
$ psPID TTY TIME CMD8726 pts/22 00:00:00 ps
10356 pts/22 00:00:00 bash
$ ps() { echo "function ps"; }
$ ps
function ps
$ command psPID TTY TIME CMD9259 pts/22 00:00:00 ps
10356 pts/22 00:00:00 bash
$ unset -f ps
$ psPID TTY TIME CMD9281 pts/22 00:00:00 ps
10356 pts/22 00:00:00 bash
3、caller
在shell中,内建(builtin)命令caller,格式如下:
caller [expr]
caller命令返回当前活动的子程序调用的上下文,即调用堆栈信息,包括shell函数和内建命令source执行的脚本。没有指定expr时,显示当前子程序调用的行号和源文件名。如果expr是一个非负整数,显示当前子程序调用的行号、子程序名和源文件名。caller命令打印出来的堆栈信息在调试程序时是很有帮助的,当前栈帧为0。如果shell没有子程序调用或者expr是一个无效的位置时,call命令返回false。
下面以例子说明caller命令的用法:
$ cat -n test.sh 1 #!/bin/bash2 3 foo()4 {5 echo "foo called"6 caller 7 }8 9 bar()10 {11 echo "bar called"12 caller 013 }14 15 test1()16 {17 echo "test1 called"18 caller19 caller 020 caller 121 caller 222 }23 24 test2()25 {26 echo "test2 called"27 test128 }29 30 test3()31 {32 echo "test3 called"33 test234 }35 36 foo37 bar38 test3
$ bash test.sh
foo called
36 test.sh
bar called
37 main test.sh
test3 called
test2 called
test1 called
27 test.sh
27 test2 test.sh
33 test3 test.sh
38 main test.sh
【Bash百宝箱】shell内建命令之builtin、command、caller相关推荐
- linux shell 内建命令,什么是Bash Shell的内建(build in)命令
1.什么是build in命令: shell内建命令是指bash(或其它版本)工具集中的命令.一般都会有一个与之同名的系统命令,比如bash中的echo命令与/bin/echo是两个不同的命令,尽管他 ...
- Linux Shell 内建命令 : builtin 命令详解
builtin命令用于执行指定的shell内部命令,并返回内部命令的返回值.builtin命令在使用时,将不能够再使用Linux中的外部命令.当系统中定义了与shell内部命令相同的函数时,使用bui ...
- 【Bash百宝箱】shell内建命令之declare、typeset、local
1.declare(typeset) 在shell中,内建(builtin)命令declare与typeset用法相同,格式如下: declare [-aAfFgilnrtux] [-p] [name ...
- (转)cd命令为何要实现成shell内建命令
2019独角兽企业重金招聘Python工程师标准>>> 如果不使用内建命令而是fork出一个子进程并且在子进程中执行的话,不会改变父环境的路径. 因为执行结束了又回到了父shell环 ...
- linux 冒号命令,Linux Shell 内建命令:冒号(:)
在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等.其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令.只起到占一个位置的作 ...
- 【Bash百宝箱】shell内建命令之echo、printf
原文地址:http://blog.csdn.net/iEearth/article/details/52640972 1.echo 在shell中,内建(builtin)命令echo,格式如下: ec ...
- shell内建命令--Linux
exec命令()取代当前shell find ./ -name "*.txt" -exec ls -al {} \; find ./ -name "*.txt" ...
- Linux Shell 内建命令 : sh命令详解
sh命令是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取.通过用户输入命令,和内核进行沟通!Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个 ...
- Shell内建命令之echo、local、logout
echo echo [-neE] [arg -],输出arg,多个arg由空格分隔,以换行符结束.除非发生写错误,否则返回状态为0.-n选项,不输出最后换行符.-e选项,启用反斜杠转义.-E选项,禁用 ...
最新文章
- 使用 mkdocs 搭建个人 wiki 站点
- 如何用cmd命令控制mysql数据库
- 老李分享:系统可用性评估
- 【NOIP2013模拟】黑魔法师之门
- 基于matlab的图解粒度参数计算,基于MATLAB的图解粒度参数计算-热带地理.PDF
- 【最短路】【Floyed】医院设置(ssl 1614)
- “中序表达式”转换为“前序表达式”、“后序表达式”
- 彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系
- ASP.NET2.0(学习第一天)
- 常见英文缩写 (持续更新……)
- 数据库进行大数据量插入/更新操作
- kali 破解压缩包密码
- html好看目录样式,HTML_CSS使用详解,目录样式类型(List Style Type) 说 - phpStudy
- 计算机网络安全基础复习(第四版)袁津生主编(转载请注明出处---https://www.cnblogs.com/qingl)...
- 路由器组成及路由器发展概述
- UE4开发五:人物模型和摄像机
- 五款堪称神奇的手机APP 一定不要错过了
- Node.js进阶基础技能—Koa基本使用
- linux 系统启动服务setup设置
- Microsoft Edge浏览器使用时过滤网页广告弹窗等插件推荐---电脑初始维护