文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

详解Shell脚本中^M的问题和解决方案

2022-06-05 00:03

关注
目录

在开发过程中,有时候不小心将Windows本地创建的shell脚本(以 .sh 结尾的脚本),传到linux系统中,通过 vi或者view命令查看文件时,发现在末尾发现出现了很多^M字符。

^M 是什么?

这个字符就是换行符。是由于跨平台解析的原因。
因为window和Linux下对行尾的换行的定义不同
Windows: \r\n
Linux/Unix: n
Mac: \r

例子

详解Shell脚本中^M的问题和解决方案

出现的原因:
在DOS/Windows里,文本文件的换行符为\r\n,而在nix系统里则为\n,所以DOS/Windows里编辑过的文本文件到了nix里,每一行都多了个^M

导致的问题:
脚本可能无法正常执行,影响程序正常使用

临时解决方案1:

如果需要从表面上修改,只需使用替换命令就能将该字符给取消;#:%s/^M//g

临时解决方案2:

在linux上创建一个文件,名称为 xxx.sh,将这个问价下载到本地,然后将脚本内容粘贴进去,重新上传到linux上打开查看。

补:解决方法

 如果需要转换,我们只需要转换文件格式即可。你可以选择直接在服务器上调整。包括如下三种方式。
(1)使用linux命令dos2unix filename,直接把文件转换为unix格式
(2)使用sed命令sed -i "s/\r//" filename  或者 sed -i "s/^M//" filename直接替换结尾符为unix格式
(3)vi filename打开文件,执行 : set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式。

本质原因

跨平台造成的编码格式问题。其实这个是历史遗留问题,根本原因就是对换行符的内存组成问题。在unix操作系统下的换行符格式为0A(ascii码),而dos格式下的换行符为 0D 0A(也就是),其实就显示为^M了。并且对于这个原因,也是有历史的。
unix将换行符的字符形式给转变了,然而,dos命令下任然保留着传统的表达方式;所以以后在进行跨平台开发的时候,前提就是考虑是否兼容,是否编码格式兼容这些基本的前提条件。

历史来源:
早期的计算机输出设备不是显示器,而是电传打字机,结构与普通的打字机差不多。有一个打印头在纸上打字,同时有一个电动机控制纸张的进出。当打印头到达行尾的时候,需要两个动作才能够到达下一行的行首:首先执行回车动作,将打印头移动到本行的行首,然后进行换行动作,电动机将纸张向上移动一行,这样打印头就处于下一行的行首,可以继续进行打印。回车和换行对应的控制字符分别是\r和\n,这就是windows中换行符为\r\n的由来。后来由于经常连续执行,所以在打印机中将这两个控制字符简化为一个控制字符,这就是Linux/Unix中的换行符\n的由来。

常用工具

dos2unix 将window下文本文件转成符合Linux系统要求的文件
unix2dos  与上面的命令的作用相反

到此这篇关于详解Shell脚本中^M的问题和解决方案的文章就介绍到这了,更多相关Shell ^M问题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯