今天运行一个其他组开发的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)这行。

  1. 最开始怀疑是MySQL驱动的问题,首先确认了classpath肯定正确,包括尝试把mysql-connector-java-5.0.2.jar复制到jdk的lib/ext/下,还是不行。
  2. 尝试移除Class.forName这行代码,因为jdbc4(JDK1.6)之后的版本是可以不写Class.forName的。结果开始报下一行的数据库连接用户名密码错误,但是这个用户名密码是没问题的,使用客户端可以正常连上。
  3. 怀疑是启动脚本的问题,尝试写死配置参数(不通过命令行指定),结果。。居然可以了。。由此推断是shell脚本什么地方写错了。
  4. 反复检查shell脚本,没看出什么问题,这才留意到程序启动的时候有报一个./start.sh: line 15: $'\r': command not found,由于后面的错误太多了,被刷屏了所以之前没有注意到。大概猜到是换行符的问题,不过因为这个可以导致数据库连接出错吗?在第一步的时候,我已经有打印输入的参数了。
  5. 打开vi使用set ff=unix解决这个换行符的问题后,重新启动,已经可以跑起来了。但是还是蛮疑惑的,一个换行符有这么大作用吗?
  6. 使用getBytes()方法打印入参的byte数组,结果发现每个参数的后面都跟上了一个ASCII码为13的这个字符,也就是\r回车符。我们知道win下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n。linux下不识别\r为回车符,所以导致每行的配置都多了个\r。并且因为这个是控制字符,所以在输出参数的时候不会打印出来,只有使用getBytes()才能看到。

至此,问题已经明朗。我觉得一个教训就是,出现错误的时候,一定要先去检查第一行的错误,任何比较微小的问题(比如这种回车符),都可能引起大的问题,而且通过后面的错误信息还不好定位。另外一个就是在win下修改shell脚本的时候,要特别警惕,注意文件的格式。

关于$'\r': command not found错误的一点体会相关推荐

  1. linux useradd bash,对于bash:useradd:command not found错误的一点理解

    对于bash:useradd:command not found错误的一点理解 问题: 前两天做实验,在命令行中添加用户时显示bash:useradd:command not found的错误,在网上 ...

  2. 【Linux】shell脚本执行错误 $‘\r‘:command not found

    1.概述 在linux上执行脚本时出现$'\r':command not found,然而仔细检查脚本,对应行位置只是一个空行,并没有问题,那么linux为什么会将一个回车的空行报错? 原因是这样的: ...

  3. $‘\r‘: command not found解决方法

    $'\r': command not found 存现这种错误是因为 编写的  shell脚本是在win下编写的,每行结尾是\r\n 的Unix 结果行是\n  所以在Linux下运行脚本 会任务\r ...

  4. 《R语言初学指南》一2.3 找到R脚本中的错误

    本节书摘来自异步社区<R语言初学指南>一书中的第2章,第2.3节,作者[美]Brian Dennis(布莱恩·丹尼斯),更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  5. $‘\r‘: command not found,syntax error near unexpected token `$‘in\r‘‘

    syntax error near unexpected token `$'in\r''的解决方法 原因 在Linux系统中,运行Shell脚本,出现了如下错误: $'\r': command not ...

  6. Linux服务器报错:xx.sh: line 4: $‘\r‘: command not found 解决方法(记录在自己的容器中解决过程)

    重要的写在前面:Linux服务器上有时使用"apt-get"安装工具包即可,可以不用安装"yum" 1. 问题 Linux服务器上执行bash xx.sh报错: ...

  7. $‘\r‘: command not found的解决方法

    缘起 在Linux系统中,运行Shell脚本,出现了如下错误: one-more.sh: line 1: $'\r': command not found 出现这样的错误,是因为Shell脚本在Win ...

  8. 安装kilo版本openstack-dashboard时出现的python compress command not found错误解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 安装openstack-dashboard时出现的python compress command not found错误解决办 ...

  9. check-lxdialog.sh: line 3: $'\r': command not found

    问题 make all make[1]: Entering directory '/cygdrive/d/AiThinkerIDE_V0.5/cygwin/home/aithinker/project ...

最新文章

  1. python【力扣LeetCode算法题库】945- 使数组唯一的最小增量
  2. 自定义ToolBar
  3. Redis多机功能之复制
  4. Sharepoint 2010配置form认证方式(SQL账号)
  5. 直接拿来用!GitHub10个开源免费的后台管理面板
  6. 盘点技术史:流量运营(PC 时代)
  7. 发送当前IP到我的手机
  8. 从零开始学keras之神经网络的数学表示
  9. 全网最全Spring面试题之高级篇整理总结(二)(共16题,附超详细解答)
  10. sql server 比较大小
  11. Excel常用统计分析函数分享
  12. 艺术论文题目汇总大全
  13. Android应用推广渠道分享
  14. laravel faker 数据填充
  15. 个推和极光推送技术介绍
  16. 比尔盖茨The Best Books I Read in 2013
  17. 【必看干货】在我面了10多家大厂(上岸)后,我吐血总结你要是这12道题都不能拿满分,那你就与大厂算法无缘了 ——AI视觉算法工程师
  18. Unity中通过场景切换但音乐继续播放
  19. 小米Max2(全网通)线刷兼救砖_解账户锁_纯净刷机包_教程
  20. 自己写的一个叫作“礼物”的C++代码,请赐教!!!

热门文章

  1. Kafka 安装和搭建 (一)
  2. sqlserver中的通配符
  3. HTTP的前世今生(HTTP1.1,HTTPS,SPDY,HTTP2.0,QUIC,HTTP3.0)
  4. 高薪Java工程师必看的书籍
  5. 当我们在谈论cpu指令乱序的时候,究竟在谈论什么?
  6. RabbitMQ管理(4)——应用管理
  7. 【今晚7点半】:华为云在数字人领域的技术探索与实践
  8. 为什么AI感知与人类感知很难直接比较?
  9. Java基础之代码执行顺序深入解析
  10. 技术圈盛会!腾讯云+社区开发者大会免费报名!