我是靠谱客的博主 开放乐曲,最近开发中收集的这篇文章主要介绍【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”)为例说明:

$ ps
  PID TTY          TIME CMD
 8726 pts/22   00:00:00 ps
10356 pts/22   00:00:00 bash
$ ps() { echo "function ps"; }
$ ps
function ps
$ command ps
  PID TTY          TIME CMD
 9259 pts/22   00:00:00 ps
10356 pts/22   00:00:00 bash
$ unset -f ps
$ ps
  PID TTY          TIME CMD
 9281 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/bash
     2  
     3  foo()
     4  {
     5      echo "foo called"
     6      caller 
     7  }
     8  
     9  bar()
    10  {
    11      echo "bar called"
    12      caller 0
    13  }
    14  
    15  test1()
    16  {
    17      echo "test1 called"
    18      caller
    19      caller 0
    20      caller 1
    21      caller 2
    22  }
    23  
    24  test2()
    25  {
    26      echo "test2 called"
    27      test1
    28  }
    29  
    30  test3()
    31  {
    32      echo "test3 called"
    33      test2
    34  }
    35  
    36  foo
    37  bar
    38  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的全部内容,希望文章能够帮你解决【Bash百宝箱】shell内建命令之builtin、command、caller所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部