./configure : /bin/sh^M : 错误的解释器 [重复]
Posted
技术标签:
【中文标题】./configure : /bin/sh^M : 错误的解释器 [重复]【英文标题】:./configure : /bin/sh^M : bad interpreter [duplicate] 【发布时间】:2011-02-24 14:42:09 【问题描述】:我一直在尝试在我的 fed 12 系统上安装 lpng142。对我来说似乎是个问题。我收到此错误
[root@localhost lpng142]# ./configure
bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
[root@localhost lpng142]#
我该如何解决这个问题? /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
【问题讨论】:
谢谢,dos2unix 拯救了我的一天。对于 osx 用户,它变得越来越容易。酿造安装 dos2unix dos2unix VIM :set fileformat=unix 问题的年龄通常不是决定重复的因素。一个在 Google 中很容易找到的一般性、重点突出的问题通常比一个晦涩的、专业的问题(答案恰好是相当笼统的)更适合重复目标。 @tripleee 说服力不够,因为任何用户都可以更轻松地将错误日志复制粘贴到网络搜索中 如果您真的认为副本应该反过来,请在Meta Stack Overflow 提出。郑重声明,“糟糕的翻译”症状是许多可能的症状之一,这个问题中关于configure
和fstab
的详细信息令人分心。如果合并问题更容易,我很乐意将这里的几个答案合并到主副本。
【参考方案1】:
要修复,用 vi 或 vim 打开脚本并进入 vi 命令模式(键 Esc),然后输入:
:set fileformat=unix
终于保存了
:x!
或 :wq!
【讨论】:
我对多个文件有同样的问题,如何将其应用于目录树?我需要去每个目录并在vi中一一打开文件并执行“:set fileformat = unix”吗?请帮忙。:set ff=unix
也可以 :)
为什么用“!”保存?仅当您想放弃更改时才使用它,事实并非如此。如果保存失败,那么可能你做错了什么。
添加到您的 .vimrc 文件中也是一个好主意,这样您以后就不必担心这个了。
不适用于我的vi
(rapbian
jessie
)。【参考方案2】:
看起来你有一个 dos 行结束文件。线索是^M
。
您需要使用 Unix 换行符重新保存文件。
您可能有一个dos2unix
命令行实用程序也可以为您执行此操作。
【讨论】:
是的,^M 有点奇怪。我确实在网络的某个地方看到了这个 dos2unix 配置建议,但不想遇到其他问题。好的,祈祷,我会试一试 :) 感谢 Konerak 和 Richard 的快速回复 如果您尝试构建的项目有许多需要转换的脚本(Qt 就是这种情况),递归地应用 dos2unix 可能是个好主意。从***目录运行“find . -type f | xargs dos2unix”将为您完成。 Freakin Qt 配置文件(从这里的源代码构建)有这个垃圾。 sigh 真正有用的工具,可以节省大量的体力劳动。再说一次,为什么在下载以 ZIP 文件的名称附带“无处不在”的库的源代码时应该这样做是我无法理解的。dos2unix
修复它... ps:yum install dos2unix
如果需要
太棒了!对于 Sublime Text 3 用户,这可以通过选择 View -> Line Endings -> Unix 来解决。【参考方案3】:
或者,如果您想使用脚本执行此操作:
sed -i 's/\r//' filename
【讨论】:
+1,在 debian linux 上为我工作 这很简单,但只适用于 GNUsed
。对于 BSD/macOS sed
,您需要使用 sed -i '' $'s/\r//' filename
(来自 bash
),或者更强大:sed -i '' $'s/\r$//' filename
【参考方案4】:
您的配置文件包含 CRLF 行尾(windows 风格),而不是简单的 LF 行尾(unix 风格)。您是从 Windows 使用 FTP 模式 ASCII 传输的吗?
你可以使用
dos2unix configure
解决这个问题,或者在 vi 中打开它并使用 :%s/^M//g;
替换它们(使用 CTRL+V, CTRL+ M 获取 ^M)
【讨论】:
不,我确实使用 linux 下载了 .gz 文件。不知道 CRLF 是如何到达那里的。 vim 搜索和替换更容易输入:%s/\r$//g
在某些系统上(例如最近的 Debian / Ubuntu)是名为 fromdos 的二进制文件,而不是 dos2unix。【参考方案5】:
您可以使用以下命令修复
cat file_name.sh | tr -d '\r' > file_name.sh.new
【讨论】:
这在 MacOS X 10.11 上也可以正常工作【参考方案6】:如果找不到运行命令,
CentOS:
# yum install dos2unix*
# dos2unix filename.sh
dos2unix: converting file filename.sh to Unix format ...
Ubuntu / Debian:
# apt-get install dos2unix
【讨论】:
【参考方案7】:这通常发生在您从 Windows 编辑文件并现在尝试从某些基于 unix 的机器上执行该文件时。
Linux Forum 上提出的解决方案对我有用(很多次):
perl -i -pe's/\r$//;' <file name here>
希望这会有所帮助。
PS:你需要在你的 unix/linux 机器上安装 perl。
【讨论】:
【参考方案8】:感谢 pwc101 对this post 的评论,此命令在 Kali Linux 中有效。
sed -i s/ctrl+vctrl+m// filename
确保替换括号中的位,。 IE。
ctrl+m
表示同时按下 Ctrl 键和 M 键。
【讨论】:
【参考方案9】:如果您使用的是 OS X,您可以通过打开文件并选择
视图 -> 文本 -> 行尾 -> Unix
菜单项,然后保存。这适用于 XCode 3.x。 XCode 4 中可能有类似的东西。
【讨论】:
或使用 TextWrangler(状态栏中的下拉菜单)或 Sublime(查看 > 行尾 > Unix)之类的编辑器来做同样的事情。【参考方案10】:根据理查德的评论。这是将文件转换为 UNIX 行结尾的简单方法。如果您像我一样在 Windows 记事本中创建它,然后尝试在 Linux 中运行它——这是个坏主意。
-
下载并安装一份Notepad++(免费)。
在 Notepad++ 中打开您的脚本文件。
文件菜单 -> 另存为 ->
另存为:
Unix script file (*.sh;*.bsh)
将新的 .sh 文件复制到您的 Linux 系统
最大化它的可执行性:chmod 755 the_script_filename
运行它:./the_script_filename
其他问题try this link.
【讨论】:
Notepad++ 中还有一个设置可以设置默认的行尾,转到:“Preferences->New Document->Format”并选择 Unix。但有一点需要注意:这只是新文件的默认设置,如果在现有文件中检测到其他内容,它不会更改格式。 您可以使用 NOtepad++ 中的替换功能来切换行尾。打开“扩展”搜索模式,在查找中输入“\r\n”,在替换中输入“\n”。点击全部替换! 要在 Notepad++ 中修复,只需右键单击右下角的 DOS\Windows,然后选择 UNIX/OSX 格式 【参考方案11】:如果您使用 TextMate 或类似程序,请另存为,然后在编码中选择 LF
而不是 CRLF
。
【讨论】:
【参考方案12】:当您在 windows 环境中编写脚本并希望在 unix 环境中运行它时,您需要注意编码:
dos2unix $filePath
【讨论】:
yum install dos2unix
【参考方案13】:
只需在脚本名称前添加 sh 即可使其适用于我的情况。
【讨论】:
非常感谢您发布此信息。所有这些 dos2unix / line-ending-fix 解决方案都不适合我。我终于通过sudo sh ./MyScript.sh
让它运行起来。在 RedHat 6 / RHEL 6 上完成【参考方案14】:
使用linux中的dos2unix命令来转换保存的文件。 示例:
dos2unix file_name
【讨论】:
【参考方案15】:您也可以在 Kate 中执行此操作。
-
打开文件
打开工具菜单
展开行尾子菜单
选择 UNIX
保存文件。
【讨论】:
以上是关于./configure : /bin/sh^M : 错误的解释器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
GEN configure /bin/sh: 1: autoconf: not found
sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
linux sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory