./configure:/ bin/sh ^ M:糟糕的翻译

Vin*_*han 379 linux bash shell newline

我一直在尝试在我的12系统上安装lpng142.对我来说似乎是一个问题.我收到这个错误

[root@localhost lpng142]# ./configure
bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
[root@localhost lpng142]# 
Run Code Online (Sandbox Code Playgroud)

我该如何解决?该/etc/fstab文件中:

#
# /etc/fstab
# Created by anaconda on Wed May 26 18:12:05 2010
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=ce67cf79-22c3-45d4-8374-bd0075617cc8 /boot                   ext4    
defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
Run Code Online (Sandbox Code Playgroud)

小智 727

要修复,请使用vi或vim打开脚本并输入vi命令模式(key Esc),然后键入:

:set fileformat=unix
Run Code Online (Sandbox Code Playgroud)

最后保存它

:x! 要么 :wq!

  • `:set ff = unix`也适用:) (26认同)
  • 为什么用"!"保存?仅在您要放弃更改时才使用它,但实际情况并非如此.如果保存失败,那么也许你做错了什么. (10认同)
  • 救了我一些宝贵的时间! (7认同)
  • 我对多个文件有同样的问题,如何将其应用于目录树?我是否需要转到每个目录并在vi中逐个打开文件并执行":set fileformat = unix"?请帮忙. (3认同)
  • 为我工作!谢谢!:) (2认同)

Ric*_*ard 362

看起来你有一个dos行结束文件.线索是^M.

您需要使用Unix行结尾重新保存文件.

您可能有一个dos2unix命令行实用程序,它也将为您执行此操作.

  • 如果您尝试构建的项目有许多需要转换的脚本(Qt就是这种情况),递归应用dos2unix可能是个好主意.从顶级目录运行"find.-type f | xargs dos2unix"将为您完成. (12认同)
  • `dos2unix`修复了它... ps:`yum install dos2unix`如果需要的话 (9认同)
  • 优秀 !对于Sublime Text 3用户,可通过选择View - > Line Endings - > Unix来解决此问题. (4认同)
  • Freakin Qt配置文件(在这里从源码构建)有这个垃圾.*叹气*真正有用的工具,可以节省大量的手工劳动.然后再次为什么在下载ZIP文件名称中"随处"附带的库的源代码时应该这样做是超出我的. (2认同)

Som*_*era 94

或者,如果您想使用脚本执行此操作:

sed -i 's/\r//' filename
Run Code Online (Sandbox Code Playgroud)

  • +1,在debian linux上为我工作 (6认同)
  • 这很简单,但只适用于_GNU_`sed`.使用BSD/macOS`sed`,你需要使用`sed -i''$'s /\r //''filename`(来自`bash`),或者稍微强一些:`sed -i''$' s /\r $ //'filename` (4认同)
  • 不要在CentOS上工作 (2认同)

Kon*_*rak 42

您的配置文件包含CRLF行结尾(窗口样式)而不是简单的LF行结尾(unix样式).你是否使用Windows的FTP模式ASCII传输它?

您可以使用

dos2unix configure
Run Code Online (Sandbox Code Playgroud)

解决这个问题,或者在vi中打开它并用:%s/^M//g;它们全部替换它们(使用CTRL+ V,CTRL+ M得到^ M)

  • 不,我确实使用linux下载.gz文件.不知道CRLF是如何到达那里的. (2认同)
  • vim搜索并替换更容易输入:`%s /\r $ // g` (2认同)

小智 26

您可以使用以下命令进行修复

cat file_name.sh | tr -d '\r' > file_name.sh.new
Run Code Online (Sandbox Code Playgroud)

  • 这在MacOS X 10.11上也可以正常工作 (2认同)

lak*_*dan 13

如果你找不到运行命令,

CentOS的:

# yum install dos2unix*

# dos2unix filename.sh
dos2unix: converting file filename.sh to Unix format ...
Run Code Online (Sandbox Code Playgroud)

Ubuntu/Debian:

# apt-get install dos2unix
Run Code Online (Sandbox Code Playgroud)


URB*_*URB 11

当您从Windows编辑文件并尝试从某些基于unix的计算机执行该文件时,通常会发生这种情况.

Linux论坛上提供的解决方案为我工作(很多次):

perl -i -pe's/\r$//;' <file name here>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

PS:你需要在你的unix/linux机器上安装perl.


You*_*iga 6

当您在 Windows 环境中编写脚本并希望在 unix 环境中运行它时,您需要注意编码:

dos2unix $文件路径


Ver*_*sen 5

如果您使用的是OS X,则可以通过打开文件并选择“

查看->文本->行尾-> Unix

菜单项,然后点击保存。这是针对XCode 3.x的。XCode 4中可能类似。


zua*_*auz 5

继理查德的评论之后。这是将文件转换为 UNIX 行尾的简单方法。如果您像我一样在 Windows 记事本中创建它,然后尝试在 Linux 中运行它 - 坏主意。

  1. 下载并为自己安装Notepad++(免费)的副本。
  2. 在 Notepad++ 中打开脚本文件。
  3. 文件菜单->另存为->
  4. 保存类型: Unix script file (*.sh;*.bsh)
  5. 将新的 .sh 文件复制到您的 Linux 系统
  6. Maxe it 可执行: chmod 755 the_script_filename
  7. 运行它: ./the_script_filename

任何其他问题试试这个链接

  • Notepad++ 中还有一个设置来设置默认行尾,转到:“首选项-&gt;新建文档-&gt;格式”并选择 Unix。但需要注意的是:这只是新文件的默认设置,如果它在现有文件上检测到其他内容,则不会更改格式。 (3认同)
  • 要在 **Notepad++** 中修复,只需右键单击右下角的 **DOS\Windows**,然后选择 **UNIX/OSX Format** (3认同)

br3*_*3nt 5

由于pwc101就评论这个职位,这个命令在Linux的卡利工作。

sed -i s/{ctrl+v}{ctrl+m}// {filename}

确保替换括号中的位{}。即{ctrl+m}意味着按Ctrl键和M键一起。


pat*_*_ai 5

如果您使用的TextMate或类似的程序,做另存为,然后在编码选择LF代替CRLF


Sko*_*pEN 5

Just adding sh before script name make it work in my case.