背景

  • Platform: M55S
  • OS: Linux
  • Kernel: 4

问题

我自己编译没问题,同事在他的虚拟机里编译我的代码时报错:

Syntax error: end of file unexpected

主要log如下:

./make_all.sh: 5: ./make_all.sh: source: not found 
...
/opt/vtcs_toolchain/vienna/usr/bin/arm-linux-gcc: 2: /opt/vtcs_toolchain/vienna/usr/bin/arm-linux-gcc: Syntax error: end of file unexpected

分析

造成Syntax error主要原因有:

脚本语法错误

比如没有循环没有结束标记等
解决: 检查语法,没有问题

字符格式问题

Windows和Linux字符格式问题,win下写的shell脚本可能是DOS格式,在Linux下面会有莫名其妙的字符,但代码都没改过,我们不是这个原因
解决:

  • Linux下:
    使用vi检查:

    vi dos.txt
    :set fileformat=unix
    :w

    看是否有莫名其妙的字符,删掉莫名其妙的字符,保存
    或者使用dos2unix工具转化为Unix兼容的格式

  • Win下:使用Notepad++或者VS code检查,重新保存为Utf8Unix兼容的格式

    兼容性问题

    因为linux将sh默认指向了dash,而不是bash,我们遇到的问题主要是这个原因

解决: 修改默认的shell
sudo dpkg-reconfigure dash
选择No