关于$'\r': command not found错误的一点体会
今天运行一个其他组开发的jar包,这个jar包由于运行参数是通过命令行的方式输入的,所以需要运行一个shell脚本来启动。
启动脚本类似这样:
#!/bin/bash
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://XX/XX?characterEncoding=UTF-8
jdbc_username=XX
jdbc_password=XX
java -jar xx.jar ${jdbc_driverClassName} ${jdbc_url} ${jdbc_username} ${jdbc_password}&
但是启动的时候一直报java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
,错误在Class.forName(jdbcDriver)这行。
- 最开始怀疑是MySQL驱动的问题,首先确认了classpath肯定正确,包括尝试把
mysql-connector-java-5.0.2.jar
复制到jdk的lib/ext/
下,还是不行。 - 尝试移除Class.forName这行代码,因为jdbc4(JDK1.6)之后的版本是可以不写Class.forName的。结果开始报下一行的数据库连接用户名密码错误,但是这个用户名密码是没问题的,使用客户端可以正常连上。
- 怀疑是启动脚本的问题,尝试写死配置参数(不通过命令行指定),结果。。居然可以了。。由此推断是shell脚本什么地方写错了。
- 反复检查shell脚本,没看出什么问题,这才留意到程序启动的时候有报一个
./start.sh: line 15: $'\r': command not found
,由于后面的错误太多了,被刷屏了所以之前没有注意到。大概猜到是换行符的问题,不过因为这个可以导致数据库连接出错吗?在第一步的时候,我已经有打印输入的参数了。 - 打开vi使用
set ff=unix
解决这个换行符的问题后,重新启动,已经可以跑起来了。但是还是蛮疑惑的,一个换行符有这么大作用吗? - 使用
getBytes()
方法打印入参的byte数组,结果发现每个参数的后面都跟上了一个ASCII码为13的这个字符,也就是\r
回车符。我们知道win下的换行是回车符+换行符,也就是\r\n
,而unix下是换行符\n
。linux下不识别\r
为回车符,所以导致每行的配置都多了个\r
。并且因为这个是控制字符,所以在输出参数的时候不会打印出来,只有使用getBytes()才能看到。
至此,问题已经明朗。我觉得一个教训就是,出现错误的时候,一定要先去检查第一行的错误,任何比较微小的问题(比如这种回车符),都可能引起大的问题,而且通过后面的错误信息还不好定位。另外一个就是在win下修改shell脚本的时候,要特别警惕,注意文件的格式。
关于$'\r': command not found错误的一点体会相关推荐
- linux useradd bash,对于bash:useradd:command not found错误的一点理解
对于bash:useradd:command not found错误的一点理解 问题: 前两天做实验,在命令行中添加用户时显示bash:useradd:command not found的错误,在网上 ...
- 【Linux】shell脚本执行错误 $‘\r‘:command not found
1.概述 在linux上执行脚本时出现$'\r':command not found,然而仔细检查脚本,对应行位置只是一个空行,并没有问题,那么linux为什么会将一个回车的空行报错? 原因是这样的: ...
- $‘\r‘: command not found解决方法
$'\r': command not found 存现这种错误是因为 编写的 shell脚本是在win下编写的,每行结尾是\r\n 的Unix 结果行是\n 所以在Linux下运行脚本 会任务\r ...
- 《R语言初学指南》一2.3 找到R脚本中的错误
本节书摘来自异步社区<R语言初学指南>一书中的第2章,第2.3节,作者[美]Brian Dennis(布莱恩·丹尼斯),更多章节内容可以访问云栖社区"异步社区"公众号查 ...
- $‘\r‘: command not found,syntax error near unexpected token `$‘in\r‘‘
syntax error near unexpected token `$'in\r''的解决方法 原因 在Linux系统中,运行Shell脚本,出现了如下错误: $'\r': command not ...
- Linux服务器报错:xx.sh: line 4: $‘\r‘: command not found 解决方法(记录在自己的容器中解决过程)
重要的写在前面:Linux服务器上有时使用"apt-get"安装工具包即可,可以不用安装"yum" 1. 问题 Linux服务器上执行bash xx.sh报错: ...
- $‘\r‘: command not found的解决方法
缘起 在Linux系统中,运行Shell脚本,出现了如下错误: one-more.sh: line 1: $'\r': command not found 出现这样的错误,是因为Shell脚本在Win ...
- 安装kilo版本openstack-dashboard时出现的python compress command not found错误解决办法
2019独角兽企业重金招聘Python工程师标准>>> 安装openstack-dashboard时出现的python compress command not found错误解决办 ...
- check-lxdialog.sh: line 3: $'\r': command not found
问题 make all make[1]: Entering directory '/cygdrive/d/AiThinkerIDE_V0.5/cygwin/home/aithinker/project ...
最新文章
- python【力扣LeetCode算法题库】945- 使数组唯一的最小增量
- 自定义ToolBar
- Redis多机功能之复制
- Sharepoint 2010配置form认证方式(SQL账号)
- 直接拿来用!GitHub10个开源免费的后台管理面板
- 盘点技术史:流量运营(PC 时代)
- 发送当前IP到我的手机
- 从零开始学keras之神经网络的数学表示
- 全网最全Spring面试题之高级篇整理总结(二)(共16题,附超详细解答)
- sql server 比较大小
- Excel常用统计分析函数分享
- 艺术论文题目汇总大全
- Android应用推广渠道分享
- laravel faker 数据填充
- 个推和极光推送技术介绍
- 比尔盖茨The Best Books I Read in 2013
- 【必看干货】在我面了10多家大厂(上岸)后,我吐血总结你要是这12道题都不能拿满分,那你就与大厂算法无缘了 ——AI视觉算法工程师
- Unity中通过场景切换但音乐继续播放
- 小米Max2(全网通)线刷兼救砖_解账户锁_纯净刷机包_教程
- 自己写的一个叫作“礼物”的C++代码,请赐教!!!