有一个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下面就执行不了,报错内容如下:

原因

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

解决方法

vi 文件名

命令模式下输入:

:set fileformat=unix

:w

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

相关主题

linux脚本无法执行命令,shell脚本在Windows下能执行,而Linux不能执行的原因及解决...相关推荐

  1. linux读取一行数据命令,Shell脚本一次读取文件中一行的2种写法

    写法一: #!/bin/bash while read line do echo $line     #这里可根据实际用途变化 done < urfile 写法二: #!/bin/bash ca ...

  2. linux shell命令分布执行,Linux学习笔记:bash特性之多命令执行,shell脚本

    今天我们学习了bash特性多命令执行包括各个命令之间的逻辑关系.其中包含"与""或""非"命令的执行.下面即为我们所学习的这些逻辑命令关系之 ...

  3. 详解在 Linux 启动时,如何自动执行命令或脚本

    2019独角兽企业重金招聘Python工程师标准>>> 我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后 ...

  4. linux循环处理脚本命令,后端开发必须掌握的Linux命令[Shell脚本篇]

    Shell脚本相关命令 介绍 一句话说明shell脚本是个啥 shell脚本就是将多个shell指令汇集到一起去完成一个复杂的功能 类似windows下的批处理文件 一般以sh为文件后缀 语法 程序结 ...

  5. linux执行命令脚本,Linux - 执行命令与脚本

    01 - Linux执行多条命令 方法1:在命令行下可以一次性粘贴多条语句,shell会依次执行并输出结果 方法2:在一个命令行中,用分号将各个命令隔开或者使用&&连接各个命令 示例: ...

  6. crt脚本怎么添加等待时间_如何在重启或启动时执行命令或脚本 | Linux 中国

    有时你需要在启动时添加自定义脚本.命令或服务,该怎么做? 来源:https://linux.cn/article-12279-1.html 作者:Magesh Maruthamuthu 译者:geek ...

  7. Linux开机后自动执行命令或脚本

    文章目录 说明 应用场景 涉及文件 步骤 1.添加开机执行指令 2.编写脚本 3.测试效果 自动化编辑工具 脚本 效果 已存在的脚本 不存在的脚本 说明 应用场景 应用场景:开机后自动执行命令或脚本 ...

  8. 如何在 Linux 中创建并运行 Shell 脚本(Bash 初学者教程)

    文章目录 1.创建并运行第一个 shell 脚本 2.将 shell 脚本转换为 bash 脚本 3.为什么大多数 shell 脚本都包含 #! /bin/bash 在 shell 脚本的开头? 4. ...

  9. java 读取ssh2协议得到的数据_Java通过SSH2协议执行远程Shell脚本

    Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) ganymed-ssh2简介: Ganymed SSH-2 for Java是用纯Java实现SS ...

  10. Linux 之旅 10:Shell 脚本

    Linux 之旅 10:Shell 脚本 (图片来自shell/bash脚本编程) Linux 上的 Shell 脚本可以看做是类似于Windows上的批处理程序(.bat)一样的东西,其本质就是将一 ...

最新文章

  1. HDLBits 系列(39)求解带有奇校验的串口接收数据的简化电路设计
  2. 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )
  3. 各种 SAP 产品的自定义 UI 创建和集成方法一览
  4. 一张图看懂阿里云网络产品[十二]云企业网
  5. 受上海Model S自燃影响?特斯拉市值周一蒸发18亿美元
  6. 今天看到一个热搜,说一个美团会员配送费6元,普通用户2元,导致轩然大波
  7. CSS实现输入框的高亮效果-------Day50
  8. ALM需求跟踪矩阵导出出错解决
  9. PS抠图小技巧-【色彩范围】
  10. duilib隐藏(显示)任务栏图标方式
  11. 目标检测特殊层:Proposal层
  12. BatchFormer: Learning to Explore Sample Relationships for Robust Representation Learning
  13. Aruba 无线调试(Instant AP)
  14. altf4不管用.是因为未使用内置管理员账户.
  15. result.append(path)与result.append(path[:])的区别
  16. 博弈论 纳什均衡 囚徒困境 智猪博弈
  17. 【2】switch语句练习1:显示法定格式的日期
  18. h5+ 调用本地摄像头拍照
  19. 【redis源码分析】Redis Sentinel 是如何实际解决分布式共识问题的
  20. 4、隐私计算--可信计算

热门文章

  1. 微信小程序添加服务器域名
  2. 计算机while语句知识点总结,while循环使用方法
  3. iOS 开发:知识地图(不定期更新)
  4. Tomcat8出现To prevent a memory leak, the JDBC Driver has been forcibly unregistered
  5. 轻轻松松实现角度转换(弧度度分秒)
  6. 51学习第四天--.跟着郭老师学:程序逐渐加入模块化练习--1从流水灯1s闪烁流动--2再加数码管1~F--3.显示数码管六个灯依次显示123456--再逐渐的加入各种功能,一步一步,可训练思维!
  7. 常用邮箱的服务器(SMTP/POP3)地址和端口整理
  8. 网络io,select,poll与epoll的初步认识
  9. Java项目的项目流程(快速了解)
  10. 制作window11系统U盘启动盘