在运行.sh脚本文件的时候提示如下错误:
./cp_ecnt_kernel.sh: 23: Syntax error: "(" unexpected
23 function cp_file(){
它说"("是出乎意料的,但是在bash里,这是一个合法的常用语法。
打开 cp_ecnt_kernel.sh文件,发现它缺少shebang line, 即首行的#!/bin/sh 或#!/bin/bash。在缺少这一行的时候,linux用/bin/sh来执行脚本。在Ubuntu里,/bin/sh缺省是dash。dash的特点是快速启动和执行,但是只包括标准特性。上面当dash执行到脚本文件的第23行的时候,它碰到了"("。它认为这个从上下文来看是没有任何意义的,因此立即报错退出。
这个错误的出现源于项目源码SDK从CentOS平台移植到Ubuntu平台进行编译。在CentOS环境下,/bin/sh缺省是bash,所以运行没问题。解决方案是,在每一个.sh脚本文件的头部(第一行)增加shebang line,即#!/bin/bash,如果有的是#!/bin/sh,要把它换成#!/bin/bash。