美文网首页
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