syntax error near unexpected token `(‘ 异常解决

网友投稿 1572 2022-11-10

syntax error near unexpected token `(‘ 异常解决

syntax error near unexpected token `(‘ 异常解决

问题的发现

​写代码的肯定少不了和 ​​shell​​​ 接触,今天执行一个 ​​shell​​ 脚本时发现报错了,报错内容如下:

syntax error near unexpected token `('

脚本内容排查了很多遍都没有找到原因,执行的方式为 ​​sh xx.sh​​

然后使用 ​​source xx.sh​​​ 执行和 ​​bash xx.sh​​执行都是 ok 的。

知识的了解

此时就需要了解 ​​sh source bash​​ 执行文件的区别。

首先看两张图

​​source​​​ 执行命令是直接执行命令,不创建子​​shell​​​​sh​​​ 创建子​​shell​​​。子​​shell​​​ 里面的变量父​​shell​​​ 无法使用,对环境变量的修改也不影响父​​shell​​​,但是父​​shell​​​ 里面的变量子​​shell​​​ 可以使用。子​​shell​​​ 执行完毕后,回到父​​shell​​​,不会影响父​​shell​​ 原本的环境

看完,这些好像和我们使用 ​​sh​​ 命令执行的报错并没有什么关系。

通过 ​​wihch​​​ 命令查看 ​​sh​​​ 命令可以发现,​​sh​​​ 只是 ​​bash​​​ 的软链接,那为什么和 ​​bash​​ 执行结果有区别呢?

​​bash​​​ 执行时,如果 ​​$0​​​ 是 ​​sh​​​ ,则要求脚本内容遵循 ​​POSIX​​​ (Portable Operating System Interface of UNIX,缩写为 POSIX )规范,当不符合规范的语法存在时,则会报错。 所以当我们使用 ​​​sh​​​ 执行时,并不是一个程序,而是一种标准(POSIX), 这种标准,在一定程度上保证了脚本的跨系统性(跨UNIX系统)。

解决问题

找到了问题的原因,我们就可以解决了 如果你仍要使用 ​​​sh​​ 的方式执行,那么请在代码的第一行加上

set +o posix

命令,这条命令会关闭使用 ​​POSIX​​ 规范的检测。

关注我,随时获取最新文章

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JS实现复选框的全选和批量删除功能
下一篇:hive访问不在同一集群的hbase表数据
相关文章

 发表评论

暂时没有评论,来抢沙发吧~