dos2unix unix2dos se ff=unix

问题及解决方案

在windwos下用记事本编写了个shell脚本,拿到cygwin下运行没问题,但是

拿到linux下运行就出问题,显示:

:bad interpreter:no such file or directory

出现问题的原因就是“行终束符”,unix/linux使用 换行符;而dos/windows使

用 回车+换行

解决办法:

1.使用vi打开该脚本

2.设置fileformat(ff)

:set ff=unix

3.另存

:w test.sh

此时test.sh就能在linux下执行了(运行前注意是否可执行)

注:在cygwin下fileformat为unix或dos都可以

示例一 DOS格式文本文件在Linux下的表现

现在有一个脚本文件job.sh,是在Linux下用vi编辑的。

[[email protected] ~]# cat job.sh

#!/bin/sh

date >job.txt

现在把它转换成DOS格式文本文件。

[[email protected] ~]# unix2dos job.sh

unix2dos: converting file job.sh to DOS format ...

尝试着运行一下。

[[email protected] ~]# ./job.sh

-bash: ./job.sh: 权限不够

[[email protected] ~]# chmod +x job.sh

[[email protected] ~]# ./job.sh

-bash: ./job.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录

DOS格式的脚本文件时无法解释执行的,因为脚本文件的第一行是用来指定解释

器的,Linux系统认为解释器是/bin/sh^M,而不是/bin/sh。

我们来通过Linux下的一些命令来看一下DOS格式文件的真面目。

[[email protected] ~]# cat -v job.sh     <== cat -v可以看到文件中的非打印字符

,而不带-v参数的cat命令不行。

#!/bin/sh^M

^M

date >job.txt^M

^M

[[email protected] ~]# hexdump -C job.sh       <== hexdump -C可以看到文件每个

字节的十六进制表示。

00000000  23 21 2f 62 69 6e 2f 73  68 0d 0a 0d 0a 64 61 74  |

#!/bin/sh....dat|

00000010  65 20 3e 6a 6f 62 2e 74  78 74 0d 0a 0d 0a         |e

>job.txt....|

0000001e

[[email protected] ~]# vi job.sh     <== 使用vi打开时可以看到底下有[dos]的格

式提示。有些版本vi显示的是行尾为^M。

#!/bin/sh

date >job.txt

~

~

"job.sh" [dos ] 4L, 30C

现在我们把DOS格式改回Unix格式的,看看效果。

[email protected] ~]# dos2unix job.sh

dos2unix: converting file job.sh to UNIX format ...

[[email protected] ~]# ./job.sh

可以执行了,不再报“-bash: ./job.sh: /bin/sh^M: bad interpreter: 没有

那个文件或目录”这个错了。

[[email protected] ~]#

示例二 dos2unix -k和dos2unix -n的使用示例

[[email protected] ~]# cat <<EOF >1.txt

> 1

> 2

> 3

> EOF

[[email protected] ~]# file 1.txt

1.txt: ASCII text

[[email protected] ~]# ls -l 1.txt

-rw-r--r-- 1 root root 6 11-14 09:08 1.txt

[[email protected] ~]# date

2010年 11月 14日 星期日 09:28:42 CST

[[email protected] ~]# unix2dos -k 1.txt      <== 保持文件时间戳

unix2dos: converting file 1.txt to DOS format ...

[[email protected] ~]# ls -l 1.txt

-rw-r--r-- 1 root root 9 11-14 09:08 1.txt

[[email protected] ~]# dos2unix -n 1.txt 2.txt     <== 将1.txt转换到2.txt

dos2unix: converting file 1.txt to file 2.txt in UNIX format ...

[[email protected] ~]# ls -l 1.txt 2.txt

-rw-r--r-- 1 root root 9 11-14 09:08 1.txt

-rw-r--r-- 1 root root 6 11-14 09:30 2.txt

[[email protected] ~]# file 1.txt 2.txt

1.txt: ASCII text, with CRLF line terminators

2.txt: ASCII text

[[email protected] ~]# cat -v 1.txt

1^M

2^M

3^M

[[email protected] ~]# cat -v 2.txt

1

2

3

[[email protected] ~]#

注意:dos2unix 而不是 unix2unix

记得用 rpm -qf `which dos2unix`  查看安装包

时间: 2024-10-11 01:53:08

dos2unix unix2dos se ff=unix的相关文章

(转)Linux命令学习总结:dos2unix - unix2dos

Linux命令学习总结:dos2unix - unix2dos 命令简介: 原文:http://www.cnblogs.com/kerrycode/p/5077969.html dos2unix是将Windows格式文件转换为Unix.Linux格式的实用命令.Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2unix命令其实就是将文件中的\r\n 转换为\n. 而unix2dos则是和dos2unix互为孪生的一个命令,它是将Linux&Un

6.set ff=unix;设置Linux中文件中每行后又尖括号的情况

 用vi命令打开要替换尖括号的文件 直接输入:   :set ff=unix 表示设置文件格式是unix格式

linux中的set ff=unix

set ff=unix : 告诉 vi 编辑器,使用unix换行符. 操作步骤: 1.用vi命令打开文件 2.直接输入 :set ff=unix 原文地址:https://www.cnblogs.com/lwcode6/p/11647955.html

Linux命令学习总结:dos2unix - unix2dos

命令简介: dos2unix是将Windows格式文件转换为Unix.Linux格式的实用命令.Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2unix命令其实就是将文件中的\r\n 转换为\n. 而unix2dos则是和dos2unix互为孪生的一个命令,它是将Linux&Unix格式文件转换为Windows格式文件的命令. 命令语法: dos2unix [options] [-c convmode] [-o file ...] [-n i

vim 配置文件

vim的配置文件如下_vimrc: """""""""""""""""""""""""""""""""""""""&qu

Vim改装成一个IDE编程环境

1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用的IDE是何等的重要啊, 估计很多人就是卡在这个门槛上了, "工欲善其事, 必先利其器"嘛, 我想如果有一个很好用的IDE, 那些Linux牛人也会欢迎的. 这都是劳动人民的美好愿望罢了, 我今天教大家把gvim改装成一个简易IDE, 说它"简易"是界面上看起来&quo

iconv,enconv,enca,convmv,unix2dos,dos2unix文件格式转换,od/cut/wc/dd/diff/uniq/nice/du等命令

1.在Vim中查看文件编码 :set fileencoding 即可显示文件编码格式. 如果你只是想查看其它编码格式的文件或者想解决 用Vim查看文件乱码 的问题,那么你可以在 ~/.vim rc 文件中添加以下内容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 这样,就可以让vim自动 识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用l

dos格式转变为unix格式 总结

当我们在windows 下编写了脚本,提交到服务器之后,更新下来之后,当你运行的的时候会看到,说这个文件不存在,但那个文件确实是存在的,那是什么原因,其实就是文件的格式导致,因为我们在windows 编写了之后我们更新到linux编写的时候她的格式还是dos 所以我们要将这个dos的格式转变为和系统一样的格式即unix格式: 1.当我们使用vim打开一个文件,如果打开之后vim 文本编辑器下面没有任何的提示则说明这个文本的格式和你的系统的格式是一致,如果在vim编辑器的下边出现 "/tmp/te

UNIX/Linux环境编程必须需要注意的问题总结

在UNIX/Linux下编程必须需要注意一下几点问题(特别是在运行于Windows上的IDE或编程工具进行开发): 1.大小写问题. 在文件或目录的命名规则中,特别注意驼峰命名法的大小写区分问题.有些语言的内部变量或者引用方面同样也是. 2.权限问题. 不要任意操作文件系统,换句话说,不要动与自己无关的任何文件(UNIX/Linux下一切都是文件),特别是新部署或者应用中要生成新文件时将权限先查看清楚 3.关于unix文件编码问题的再次强调 在运行于Windows上的IDE或编程工具进行开发时特