linux脚本无法执行命令,shell脚本在Windows下能执行,而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下面就执行不了,报错内容如下:

e7bbde8374047ebb3385859be621bd86.png

原因

f03510a5a878d4756268bd56d108687b.png

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

解决方法

vi 文件名

命令模式下输入:

:set fileformat=unix

:w

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

相关主题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值