anish
anish

Reputation: 7422

While executing shell scripts, how to know which line number it's executing,

While executing shell scripts, how to know which line number it's executing, do have write a wrapper , where i can execute a shell scripts from a shell scripts and to know which line number it's executing.

Upvotes: 16

Views: 8225

Answers (3)

Charles Duffy
Charles Duffy

Reputation: 295845

You can set the PS4 variable to cause set -x output to include the line number:

PS4=':${LINENO}+'
set -x

This will put the line number before each line as it executes:

:4+command here
:5+other command

It's important to have some sigil character (such as a + in my examples) after your variable expansions in PS4, because that last character is repeated to show nesting depth. That is, if you call a function, and that function invokes a command, the output from set -x will report it like so:

:3+++command run within a function called from a function
:8++command run within a function
:19+line after the function was called

If multiple files are involved in running your script, you might want to include the BASH_SOURCE variable as opposed to only LINENO (assuming this really is a bash script, as opposed to /bin/sh -- be sure your script starts with #!/bin/bash!):

PS4=':${BASH_SOURCE}:${LINENO}+'
set -x

Upvotes: 22

Dennis Williamson
Dennis Williamson

Reputation: 360685

Bash has a special variable $LINENO which does what you want.

#!/bin/bash
echo "$LINENO"
echo "$LINENO"
echo "$LINENO"

Demo:

$ ./lineno
2
3
4

Upvotes: 6

Brian Agnew
Brian Agnew

Reputation: 272417

#!/bin/sh -x

will report the lines as they're executed (the -x option, to be clear). It won't give you the line number, but report the actual line.

An alternative, but more painful, approach is to use a trap handler, as documented here.

Upvotes: 5

Related Questions