在windows写了个Ubuntu换源脚本,直接传到linux中运行时报错
a.sh: line 2: $'\r': command not found
检测到您的Ubuntu系统版本为:xenial
a.sh: line 6: $'\r': command not found
**********************************
请选择镜像源:
1.阿里
2.清华
3.网易
4.中科大
**********************************
': not a valid identifierrceChoice
a.sh: line 18: $'\r': command not found
a.sh: line 25: syntax error near unexpected token `$'in\r''
'.sh: line 25: `case $sourceChoice in
1、最开始直接以为语法存在问题,就直接在linux中写简单脚本测试,并无问题,又仔细检查脚本,没看出什么问题,索性直接在linux直接重写,完美运行。
2、感觉问题应该在编码这,仔细看了看报错中有$'in\r'
,大概猜到是换行符的问题,上百度查到:在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n。所以决定在windows小写的脚本中添加sed -i 's/\r$//' $0
,解决问题。还看到一种解决办法,就是在linux下运行脚本的时候,修改下脚本的的编码格式,vim 脚本,底行模式,输入
set fileformat=unix
至此,问题明朗,得一个教训就是,出现错误的时候,一定认真查看报错,任何比较微小的问题(比如这种回车符),都可能引起大的问题,而且通过后面的错误信息还不好定位。