sudo dpkg-reconfigure dash
有时在运行脚本时使用sh会出错
单独执行./test.sh则又不会出错,查了一下脚本没有发现错误,经过搜索说可能是sh的链接问题。
首先到/bin/下面查看当前链接:ls -l /bin/sh
发现sh默认是指向dash的。按照文末参考文章中的方法修改链接,似乎还是没有效果。
经过搜索发现dash和bash是不同的(一直把dash看成bash了!!),那么到底是bash还是该是dash呢,Ubuntu安装时默认使用dash,据说dash比bash体积小速度快,但原来在bash下正常运行sh脚本在dash下运行往往有问题,而且提示错误模糊,说明dash的兼容似乎也有问题。
不过已经有人发现规避问题的方法,就是重新配置dash:
sudo dpkg-reconfigure dash
会弹出重新配置dash界面,并选择“no”不使用dash。
shell脚本数组报错Syntax error: "(" unexpected
执行该脚本,在有的机器上会报错Syntax error: “(” unexpected
这与你实际使用的shell版本有关。你可以用 ls -l /bin/*sh 打印出来,例如:
-rwxr-xr-x 1 root root 959120 Mar 29 2013 /bin/bash
lrwxrwxrwx 1 root root 21 Nov 22 2013 /bin/csh -> /etc/alternatives/csh
-rwxr-xr-x 1 root root 109768 Mar 30 2012 /bin/dash
lrwxrwxrwx 1 root root 4 Mar 29 2013 /bin/rbash -> bash
lrwxrwxrwx 1 root root 4 Mar 30 2012 /bin/sh -> dash
lrwxrwxrwx 1 root root 7 Nov 17 2012 /bin/static-sh -> busybox
lrwxrwxrwx 1 root root 13 Oct 15 2011 /bin/tcsh -> /usr/bin/tcsh
在这里,sh被重定向到dash,因此,如果执行./example.sh,则使用的是dash
避免报错可有多种方法,例如执行 bash example.sh,或者,将脚本第一行改为