昨天刚刚写了一个系统优化的shell脚本,在进行测试的时候弹出Syntax error: "(" unexpected
报错,开始还以为是我写的脚本不够严谨,就换到另外一个Linux环境进行测试,结果又可以跑起来。
我检查一下shell版本,发现解析器是dash
,这个时候就怀疑是Linux的shell环境存在不兼容的情况,因为shell的不同版本解析器有sh,bash,dash......
等等,不兼容就会报错。
# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Dec 11 2020 /bin/sh -> dash
经查,在ubuntu和debian上,sh是/bin/dash的软链接,直接执行脚本是dash,Ubuntu/Debian为了加快开机速度,用dash代替了传统的bash。
解决方法一
查看当前系统的shell使用什么版本,然后在脚本进行编辑,在首行添加一行来指定解析器。
#!/bin/bash
解决方法二
如果系统是Ubuntu/Debian
可以使用dpkg-reconfigure dash
这个命令来进行切换。
选择 NO
就可以,就可以再次执行命令测试。
发表评论