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

2024-02-09 15:38

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

解决问题

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

set +o posix

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


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

这篇关于syntax error near unexpected token `(‘ 异常解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694613

相关文章

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束