在Ubuntu下用sh -x <script-name> 调试一个shell脚本,发现shell不支持下面这种for loop
for (( expr1; expr2; expr3 ))上网搜索了以下,才发现Ubuntu默认的shell不是默认的bash,而是采用了dash,如下所示
fly@fly-laptop:~$ which sh
/bin/sh
fly@fly-laptop:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2010-07-06 04:50 /bin/sh -> dash
如果想将默认的shell改回bash,方法就是在终端执行 sudo dpkg-reconfigure dash,然后选择 no。
但是Ubuntu默认设置还是不做修改,改用 /bin/bash -x <script-name> 替代
不过有一点比较奇怪,如果直接用 ./<script-name> 运行shell脚本,发现不存在上述的问题,难道这样不是调用dash shell,confused.
另外还可以使用bashdb调试shell脚本,如果想用IDE,可以使用尝试ddd --debugger /usr/bin/bashdb <script-name>