在Ubuntu下写的shell文件t.sh执行时出现错误:
1 t.sh: 6: Syntax error: Bad for loop variable
从ubuntu 6.10开始,ubuntu就将之前默认的bash shell更换成了dash shell,其表现为/bin/sh链接倒了/bin/dash,而不是传统的/bin/bash,这可以用file /bin/sh查看。
dash更小,运行更快,还与POSIX兼容。但问题是,由于shell的更换,致使很多脚本出错,毕竟现在的很多脚本不是100%的POSIX兼容。
把默认的shell改回bash,方法就是在终端执行:
1 sudo dpkg-reconfigure dash
然后选择no
奇怪的是,改之前和之后,用
1 echo $SHELL
等方法查看当前正在使用的shell都是显示为/bin/bash,不知到为什么。
下面的方法都可以查看当前正在使用的shell类型:
1 ps 2 echo $SHELL 3 echo $0(据说不能判断csh) 4 ps | grep $$ | awk '{print $4}'(据说可以判断各种shell) 5 pmap `echo $$` |head -1