【问题标题】:./configure : /bin/sh^M : bad interpreter [duplicate]./configure : /bin/sh^M : 错误的解释器 [重复]
【发布时间】: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 提出。郑重声明,“糟糕的翻译”症状是许多可能的症状之一,这个问题中关于configurefstab 的详细信息令人分心。如果合并问题更容易,我很乐意将这里的几个答案合并到主副本。

标签: linux bash shell newline


【解决方案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 上为我工作
  • 这很简单,但只适用于 GNU sed。对于 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+v}{ctrl+m}// {filename}

      确保替换括号中的位,{}。 IE。 {ctrl+m} 表示同时按下 Ctrl 键和 M 键。

      【讨论】:

        【解决方案9】:

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

        视图 -> 文本 -> 行尾 -> Unix

        菜单项,然后保存。这适用于 XCode 3.x。 XCode 4 中可能有类似的东西。

        【讨论】:

        • 或使用 TextWrangler(状态栏中的下拉菜单)或 Sublime(查看 > 行尾 > Unix)之类的编辑器来做同样的事情。
        【解决方案10】:

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

        1. 下载并安装一份Notepad++(免费)。
        2. 在 Notepad++ 中打开您的脚本文件。
        3. 文件菜单 -> 另存为 ->
        4. 另存为: Unix script file (*.sh;*.bsh)
        5. 将新的 .sh 文件复制到您的 Linux 系统
        6. 最大化它的可执行性:chmod 755 the_script_filename
        7. 运行它:./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 中执行此操作。

            1. 打开文件
            2. 打开工具菜单
            3. 展开行尾子菜单
            4. 选择 UNIX
            5. 保存文件。

            【讨论】:

              猜你喜欢
              • 2012-04-16
              • 2014-05-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-12-22
              • 2018-11-14
              相关资源
              最近更新 更多