云网牛站
所在位置:首页 > Linux教程 > shell脚本在Windows下能执行,而Linux不能执行的原因及解决

shell脚本在Windows下能执行,而Linux不能执行的原因及解决

2018-09-28 15:36:47作者:虫儿飞ZLEI稿源:LINUX网

有一个shell脚本可以在Windows和Linux系统中执行,但是要用到这个脚本.sh文件时,Windows下测试可以运行,复制到Linux环境就运行不了,因为多了^M字符。下面解说产生问题的具体原因及解决方法。

 

shell脚本的内容

#!/bin/bash -ex

set -ex

WORK_DIR=${WORKSPACE-"$(cd `dirname $0`;pwd)/.."}

PROG_NAME=$0

IMAGE_NAME=$1

IMAGE_VERSION=$2

usage() {

echo "Usage: $PROG_NAME \n

sh build_docker.sh --IMAGE_NAME XXX --IMAGE_VERSION XXX \n

--IMAGE_NAME : package or test \n

--IMAGE_VERSION : service IMAGE_VERSION. eg: 1.0.0 \n

eg: sh build_docker.sh --IMAGE_NAME test --IMAGE_VERSION 1.0.0 \n"

exit 2 # bad usage

}

if [ "$1" == "-h" ];then

usage

fi

while [[ $# -gt 0 ]]; do

key=$1

case $key in

--IMAGE_NAME)

IMAGE_NAME=$2

shift # past argument

shift # past value

;;

--IMAGE_VERSION)

IMAGE_VERSION=$2

shift # past argument

shift # past value

;;

*)

shift # past argument

shift # past value

;;

esac

done

if [ -z "$IMAGE_VERSION" ]; then

echo "ERROR: version is not defined!!!"

exit 1

fi

#cd ${WORK_DIR}/datatransfer/

mvn -DIMAGE_NAME=$IMAGE_NAME -DIMAGE_VERSION=$IMAGE_VERSION  clean package docker:build -DskipTests

 

问题

以上脚本在Windows下面可以执行,放到Linux下面就执行不了,报错内容如下:

shell脚本在Windows下能执行,而Linux不能执行的原因及解决

 

原因

shell脚本在Windows下能执行,而Linux不能执行的原因及解决

在Linux下如上图,其意思是说因为复制粘贴,然后有一些看不见的特殊字符,你可以看到上图有很多的^M字符出现。在Linux执行cat -v可以看到有很多^M的字符,这个是Windows的换行,所以在Linux中执行脚本会失败。而在Windows中可以识别这些换行,所以在Windows中可以正常执行脚本。

 

解决方法

vi 文件名

命令模式下输入:

:set fileformat=unix

:w

然后重新cat -v一下看到^M都没有了,这样脚本就可以在Linux中执行起来了。

 

相关主题

《Shell脚本学习-Linux命令行》书籍 一共三十七章在线阅读

精选文章
热门文章