2012-05-30 100 views

回答

20

可以設置PS4變量可使set -x輸出到包括行號:

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

這將使行號的每一行,因爲它之前執行:

:4+command here 
:5+other command 

PS4的變量擴展之後,由於最後一個字符被重複顯示嵌套深度,因此在我的示例中使用一些印記字符(例如+)很重要。也就是說,如果你調用一個函數,該函數調用命令,從set -x輸出將像這樣稟報:

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

如果多個文件涉及運行腳本,你可能要包括BASH_SOURCE而不是隻LINENO變量(假設這確實是一個bash腳本,而不是/bin/sh - 確保您的腳本#!/bin/bash開始!):

PS4=':${BASH_SOURCE}:${LINENO}+' 
set -x 
5
#!/bin/sh -x 

將在執行時報告行(-x選項,待明確)。它不會給你行號,但報告實際行。

另一種方法,但更痛苦的方法是使用陷阱處理程序,如記錄here

+1

和'-xv'給出更多的信息。 – choroba

6

Bash有一個特殊變量$LINENO它可以做你想做的。

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

演示:

$ ./lineno 
2 
3 
4