美文网首页
shell脚本在windows上可以执行,Linux上面不能执行

shell脚本在windows上可以执行,Linux上面不能执行

作者: 虫儿飞ZLEI | 来源:发表于2018-09-28 15:07 被阅读0次

最近项目中用到了脚本.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上查看

在Linux执行cat -v 可以看到有很多^M的字符,这个是windows的换行,所以在Linux中执行脚本会失败。而在windows中可以识别这些换行,所以可以正常执行脚本。

解决办法
vi 文件名
命令模式下输入:

 :set fileformat=unix 
 :w 

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

相关文章

网友评论

      本文标题:shell脚本在windows上可以执行,Linux上面不能执行

      本文链接:https://www.haomeiwen.com/subject/jynuoftx.html