How to execute a bash script line by line?
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 | #Example Script wget http://file1.com cd /dir wget http://file2.com wget http://file3.com |
我想一行一行地执行bash脚本并测试退出代码($?)并决定是否继续执行:
这基本上意味着我需要在原始脚本的每一行下面添加以下脚本:
1 2 3 4 5 6 7 | if test $? -eq 0 then echo"No error" else echo"ERROR" exit fi |
原稿变成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #Example Script wget http://file1.com if test $? -eq 0 then echo"No error" else echo"ERROR" exit fi cd /dir if test $? -eq 0 then echo"No error" else echo"ERROR" exit fi wget http://file2.com if test $? -eq 0 then echo"No error" else echo"ERROR" exit fi wget http://file3.com if test $? -eq 0 then echo"No error" else echo"ERROR" exit fi |
但是脚本变得膨胀了。
有更好的方法吗?
一个人可以使用
1 | command || exit 1 |
你的
1 | if command; then |
以上同:
1 2 | command if test"$?" -eq 0; then |
有很多方法可以做到这一点。
例如,可以使用set在"bad"rc上自动停止;只需将
1 | set -e |
在你的剧本上面。或者,您可以编写一个"check_rc"函数;有关一些起点,请参见此处。
或者,从以下内容开始:
1 2 3 4 5 6 7 8 9 | check_error () { if [ $RET == 0 ]; then echo"DONE" echo"" else echo"ERROR" exit 1 fi } |
用于:
1 2 | echo"some example command" RET=$? ; check_error |
如前所述;很多方法可以做到这一点。
最好的办法是在观察到任何非零返回代码后立即使用
1 2 3 4 5 6 7 8 9 10 | trap errorsRead ERR; function errorsRead() { echo"Some none-zero return code observed.."; exit 1; } somecommand #command of your need errorsRead # calling trap handling function |
你可以做这个装置:
1 | wget http://file1.com || exit 1 |
如果命令返回非零(失败)结果,将终止脚本,错误代码为1。