最近项目中用到了脚本.sh文件,本地测试可以跑,放到运行环境跑不了了。
脚本的内容是这样的:
#!/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下面就跑步起来了,报错内容如下:
报错信息后来查到原因:
https://stackoverflow.com/questions/17136273/bin-bash-l-invalid-option
它的意思是说因为复制粘贴,然后有一些看不见的特殊字符。
在Linux执行cat -v 可以看到有很多^M的字符,这个是windows的换行,所以在Linux中执行脚本会失败。而在windows中可以识别这些换行,所以可以正常执行脚本。
解决办法
vi 文件名
命令模式下输入:
:set fileformat=unix
:w
然后重新cat -v一下看到^M都没有了,这样脚本就可以在Linux中跑起来了。
网友评论