日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/2/28 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于$'\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错误的一点体会的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。