Table of Contents

The caller builtin command

Synopsis

caller [FRAMENUMBER]

Description

The caller builtin command is used to print execution frames of subroutine calls. Without giving a framenumber, the topmost execution frame information is printed ("who called me") wile linenumber and filename.

When an execution frame number is given (0 - topmost), the linenumber, the subroutine (function) and the filename is printed. When an invalid execution frame number is given, it exists FALSE. This way it can be used in a loop (see the examples section below).

Examples

Simple stack trace

The code below defines a function die that is used to exit the program. It prints a list of execution frames, starting with the topmost frame (0). The topmost frame is the "caller of the die function", in this case function "f1".

This way, you can print a "stack trace" for debugging or logging purposes.

The code is made very simple, just to show the basic purposes.

#!/bin/bash
 
die() {
  local frame=0
  while caller $frame; do
    ((++frame));
  done
  echo "$*"
  exit 1
}
 
f1() { die "*** an error occured ***"; }
f2() { f1; }
f3() { f2; }
 
f3

Output

12 f1 ./callertest.sh
13 f2 ./callertest.sh
14 f3 ./callertest.sh
16 main ./callertest.sh
*** an error occured ***

Notes

Portability considerations

See also