dos2unix 是将 Windows 格式文件转换为 Unix/Linux 格式的实用命令。
dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]
-sh: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory
大多数原因是因为 shell 脚本是在 Windows 编写导致的换行问题,具体原因是 Windows 的换行符号为 CRLF(\r\n),而 Unix\Linux 为 LF(\n)。
不同操作系统 换行符 标准不统一, 秦始皇听了都要落泪。 多少年前, 我曾也被这东西坑过无数次, 往事不堪回首。
首先介绍下,在ASCII中存在这样两个字符CR(编码为13)和 LF(编码为10),在编程中我们一般称其分别为’\r’和’\n’。他们被用来作为换行标志,但在不同系统中换行标志又不一样。下面是不同操作系统采用不同的换行符: Unix和类Unix(如Linux):换行符采用 \n Windows和MS-DOS:换行符采用 \r\n Mac OS X之前的系统:换行符采用 \r Mac OS X:换行符采用 \n Linux中查看换行符 第一种使用"cat -A [Filename]" 查看,如下图所示,看到的为一个Windows形式的换行符,\r对应符号^M,\n对应符号$.
Linux执行.sh文件,提示No such file or directory的问题:
前段时间,有个朋友碰到由于Windows的换行符和Linux换行符不一样,导致程序编译不通过。这个问题之前自己也碰到过,网上资料也蛮多,不过还是借此总结总结,因为发现总结+实践的方式能够让自己更好的提升。
描述:xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
前几天编写的shell小脚本,测试自动安装MySQL的,今天测试运行,然后出现如下错误
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141698.html原文链接:https://javaforall.cn
Ubuntu系统打开Windows下生成的文本文件,会在每行的末尾出现’^M’ 原因就是Windows和Linux的回车符是不同的
偶然使用 windows 进行编写脚本。使用 wsl (windows subsystem for linux) 进行运行的时候,什么事情没有。但是当把脚本移植到远程服务器进行运行的时候,发现脚本执行出现了错误:-bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory 。一时间解决不了。理论上都使用wsl 执行过了,应该是没问题了。但是通过查找资料发现,确实是有问题:
dos2unix: converting file XXX.sh to Unix format ..
我们有时在Windows编辑的文件,放到了Linux环境中,打开文件,可能发现每行结尾多了一个“^M”,导致一些在Windows下能执行的解析程序,放到了Linux中,执行就会报错,问题就出在这个"^M"。
这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
经过一番检索我发现,在使用命令行时,如果samplelist文件中的文本使用了DOS换行符(\r\n),则可能会导致输出结果不正确。
“回车”字符可以往回追溯很长一段时间 —— 早在打字机上就有一个机械装置或杠杆将承载纸滚筒的机架移到右边,以便可以重新在左侧输入字母。他们在 Windows 上的文本文件上保留了它,但从未在 Linux 系统上使用过。当你尝试在 Linux 上处理在 Windows 上创建的文件时,这种不兼容性有时会导致问题,但这是一个非常容易解决的问题。
解决方案 如果centos服务器安装 yum -y install dos2unix 然后找到脚本目录执行 dos2unix carinet.sh即可 如果linux编写的脚本,放到windows服务器上运行的话,可以按照yum -y install unix2dos 然后转换后上传到windows服务即可
windows和Linux的换行符存在差异,Windows下写的脚本拷贝到Linux系统,会导致#!/bin/bash后面多个^M,因此提示找不到文件。
在Windows环境下用Notepad++写了个shell脚本,上传到Linux平台后运行报错如下:
(说明:我们拿到的bed文件时常是客户在Windows系统下编辑好的,其行尾是\r\n,在进行NGS分析前最好将其转换为Unix风格的行尾\n。)
在ASCII码中,我们会看到有一类不可显示的字符,叫控制字符,其中就包含\r 和 \n 等控制字符。
在 ASCII 码中,我们会看到有一类不可显示的字符,叫控制字符,其中就包含\r 和 \n 等控制字符。
本文记录 Syntax error: end of file unexpected (expecting “then”) 错误解决方案。 问题原因 出现问题的原因是.sh文件是dos格式文件,但是linux的shell需要unix格式的文件 解决方案 转换文件格式 $ sudo apt-get install dos2unix $ dos2unix <filename> 随后重新运行 sh 文件 参考资料 https://blog.csdn.net/qq_38989148/article/det
Ubuntu系统打开Windows下生成的文本文件,会在每行的末尾出现’^M’ 原因就是Windows和Linux的回车符是不同的 在Windows下回车符是\r\n回车换行 在Linux下回车符是\n 最简单、最常用的解决方法是使用dos2unix命令转换:dos2unix filename Ubuntu下dos2unix和unix2dos命令在tofrodos包中 安装:apt-get install tofrodos 安装完之后用dos2unix和unix2dos发现还是不能用,原来是Ubuntu10.04里已经不再用这个命令啦,
原因是换行机制不一样,Unix下是\n(0A),mac下是\r(0D),win下是\r\n(0D0A)。导致的结果是在程序中会造成一定的混乱。
一直对换行符这个东西概念比较模糊,直到最近花了一点时间仔细研究了一下,才彻底搞清楚这个问题,本文前面介绍部分是外文转载,后面例子是个人总结,希望能对大家有一些帮助。 回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,
在mac或者linux中编译krpc,只要要输入以下7条命令 如果是在windwos上编译,需要下文更多命令的操作 (主要是由于编码的格式不同,需要对文件格式进行转换才能进行操作) #git命令 git clone https://gitee.com/fancytech/protobuf cd protobuf git checkout v3.5.1-krpc #在cygwin中操作的命令 ./autogen.sh ./configure make make install windows下的
功能:crt模式看文件浏览过滤 语法:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file ...] 用法: 需要按键操作浏览过程 空白键 (space):向下翻一页; Enter:向下翻一行; /字串:在这个显示的内容当中,向下搜寻字串这个关键字; f:快速翻页 q:退出more浏览 说明:more虽然可以浏览比cat更多的文件内容,但有缺点,不能往上翻页,只能往下翻页,直到结束。 4.less
大多数Linux都会自带的文本编辑器。 功能强大:代码补全、编译及错误跳转等方便编程的功能特别 丰富,在程序员中被广泛使用。 功能强大到其官方现在对自己的定位是“程序开发工具”
文章目录 一、文件格式转换 一、文件格式转换 指定路径下所有cpp和h文件从windows转为linux。 #!/bin/bash function mydos2unix() { for file in `ls $1` do file_extension=${file##*.} if [ -d $1/$file ]; then mydos2unix $1/$file elif [ $file_extension ==
linux系统是centos 7.x 发现将windows自动打的包发到centos后执行.sh文件出现如下:
管理员在进行系统操作的时候,不可避免地会对文本进行修改,如进行各种服务程序配置文件的改动,使程序对用户提供不同的服务效果。在本章我们向大家介绍Linux上常见的编辑器ed、vi、emacs,同时以vi为例,讲解Linux中的文本编辑,为大家成为优秀的系统管理员打下基础。
unix2dos: converting file baby to DOS format ...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/53322573
* 因为本例中设置每天0点进行日志的拆分,所以folder和rq均设置采用昨天的日期进行归档。
dos2unix 命令用于将纯文本文件从 DOS 或 Mac 格式转换为 Unix。DOS 下的文本文件是以 \r\n 作为换行符,而 Unix 下的文本文件是以 \n 作为换行符。
背景描述:删除文件夹时,文件中存在文件“.user.ini”,报出错误“删除user.ini提示Operation not permitted”。
一、 发展史 Unix: 1969年,Ken Thompson(肯 汤普森)和Dennis Ritchie(丹尼斯 里奇)在美国贝尔实验室创造了UNIX操作系统。 特点:功能强、可移植性高 70年代末 美国加州大学伯克利分校的教授和学生一起开发出BSD UNIX。 UNIX SUN——Solaris HP——HP-UX、Tru64 IBM——AIX BSD UNIX FreeBSD、NetBSD、OpenBSD等 1983-9-27,GNU计划诞生,计划
最近接到一个 case:大数据分析那边反馈我们这边推送的数据同比去年同期少了很多。这是很不正常的,因为业务一直在增长。 于是,我开始顺藤摸瓜的跟进。一开始就发现一个小问题:scp 推送文件脚本执行后居
Windows下是CRLF(\r\n或0d0a),Linux下是LF(\n或0a)。在Linux下有时会遇到从Windows过来的文本文件,这些文件带了Windows换行符,Linux下进行脚本处理时有可能会出一些莫名其妙的错误。因此需要将这些文件转换为Linux换行符。
在各操作系统下,文本文件所使用的换行符是不一样的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)作为换行符。Git提供了一个“换行符自动转换”功能。这个功能默认处于“自动模式”,当你在签出文件时,它试图将 UNIX 换行符(LF)替换为 Windows 的换行符(CRLF);当你在提交文件时,它又试图将 CRLF 替换为 LF。Git 的“换行符自动转换”功能听起来似乎很智能、很贴心,因为它试图一方面保持仓库内文件的一致性(UNIX 风格),一方面又保证本地文件的兼容性(Windows 风格)。但遗憾的是,这个功能是有 bug 的,而且在短期内都不太可能会修正。
后来发现执行脚本变动比较频繁,需要反复执行dos转换为unix,于是做了一个DojobH,即支持脚本——包装了3条固定操作:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
在Windows中编辑的shell脚本,传到linux系统中,在末尾发现出现了很多^M字符
window系统一般文件名编码为gbk,文件内容编码这个需要通过编辑器查看或者设置,找个editplus文本编辑器就可以处理文本内容编码。
领取专属 10元无门槛券
手把手带您无忧上云