首页 > 代码库 > 调试 shell script 方法

调试 shell script 方法

wade@V1088:~$ cat b.sh
#!/bin/bashdir=`pwd`dir=$dir/for f in `ls *.png`do echo $dir$fdone

看每一行代码的执行:

wade@V1088:~$ bash -x b.sh++ pwd+ dir=/home/wade+ dir=/home/wade/++ ls chrome_1407299385726.png chrome_1427299385726.png+ for f in `ls *.png`+ echo /home/wade/chrome_1407299385726.png/home/wade/chrome_1407299385726.png+ for f in `ls *.png`+ echo /home/wade/chrome_1427299385726.png

进一步,看具体执行的代码与行号对应:

wade@V1088:~$ export PS4=+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: wade@V1088:~$ bash -x b.sh++b.sh:2:: pwd+b.sh:2:: dir=/home/wade+b.sh:3:: dir=/home/wade/++b.sh:8:: ls chrome_1407299385726.png chrome_1427299385726.png+b.sh:4:: for f in `ls *.png`+b.sh:7:: echo /home/wade/chrome_1407299385726.png/home/wade/chrome_1407299385726.png+b.sh:4:: for f in `ls *.png`+b.sh:7:: echo /home/wade/chrome_1427299385726.png

指定脚本的部分去跑详细的行号,其余的忽略:

wade@V1088:~$ cat b.sh #!/bin/bashdir=`pwd`dir=$dir/#this line above wont log out set -xfor f in `ls *.png`do  echo $dir$fdoneset +x#the follow line wont log out echo endabc=new var

运行输出:

wade@V1088:~$ ./b.sh++./b.sh:10:: ls chrome_1407299385726.png chrome_1427299385726.png+./b.sh:6:: for f in `ls *.png`+./b.sh:9:: echo /home/wade/chrome_1407299385726.png/home/wade/chrome_1407299385726.png+./b.sh:6:: for f in `ls *.png`+./b.sh:9:: echo /home/wade/chrome_1427299385726.png/home/wade/chrome_1427299385726.png+./b.sh:11:: set +xend