Shell 脚本出现 $'\r': command not found

背景介绍:

在服务器部署jar包,以前都是在Windows打包然后上传到服务器,再通过命令 java -jar xxx.jar 部署,感觉很繁琐,所以就写了个脚本,自动 pull 远程仓库代码,然后打包,部署。

出现问题:

先写了一步获取 jar 包进程的 pid命令

#!/bin/sh
pid=$(ps -ef|grep bigbang.jar | grep  -v grep | awk '{print $2}')
echo $pid

当执行这个脚本时,报错如下:
在这里插入图片描述

分析原因:

因为这个脚本最开始是windows下写好,上传到服务器上的,windows 下回车符linux下回车符解析是不一样的,所以才会出现上述问题。

解决方法:

在脚本中使用 set ff=unix ,告诉 vi 编辑器,使用unix换行符

在这里插入图片描述
这样再次执行这个脚本时,就能成功获取线程pid了
在这里插入图片描述

贴一个从远程仓库拉去最新代码、打包、部署的脚本:

#! /bin/sh

#要部署jar的名字
jarName=bigbang.jar

#项目的根目录
cd /usr/local/bigbang/bigbang-git/bigbangspring

#拉去仓库最新代码
git pull

#开始使用maven打包
mvn clean package -DskipTests

#打包结束,cd 到项目target目录,打好jar就在该目录下面
cd /usr/local/bigbang/bigbang-git/bigbangspring/target

#杀死当前已部署的jar包进程
pid=$(ps -ef|grep $jarName | grep -v grep | awk '{print $2}')
kill -9 ${pid}

#开始部署jar包
nohup java -jar -Dfile.encoding=UTF-8 $jarName >/dev/null 2>&1 &

为了更好地看到脚本执行流程,可以在每一步输出相应的提示语句,这样整个流程就比较清楚,脚本执行到哪一步报错,都能一清二楚,快速定位错误位置。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章