./configure: / bin / sh ^ M: плохой интерпретатор

287

Я пытаюсь установить lpng142 на мою систему с питанием 12. Кажется, проблема для меня. Я получаю эту ошибку

[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
  • 3
    спасибо, dos2unix спаси мой день. для пользователя OSX это становится проще. заварить установить dos2unix dos2unix
  • 5
    VIM: установить fileformat = unix
Показать ещё 4 комментария
Теги:
newline

15 ответов

551
Лучший ответ

Чтобы исправить, откройте свой script с помощью vi или vim и войдите в режим командной строки vi (клавиша Esc), затем введите следующее:

:set fileformat=unix

Наконец, сохраните его

:x! или :wq!

  • 7
    сэкономил мне драгоценное время!
  • 3
    У меня та же проблема с несколькими файлами, как это можно применить для дерева каталогов? мне нужно перейти в каждый каталог и открыть файлы один за другим в vi и сделать ": set fileformat = unix" ?? Пожалуйста помоги.
Показать ещё 12 комментариев
342

Похоже, у вас есть файл окончания строки dos. Подсказка - ^M.

Вам нужно повторно сохранить файл, используя окончание строки Unix.

У вас может быть утилита командной строки dos2unix, которая также сделает это для вас.

  • 1
    Да, ^ M вроде странно. Я видел это предложение по настройке dos2unix где-то в сети, но не хотел сталкиваться с другими проблемами. Хорошо, пальцы скрещены, я попробую :) Спасибо за быстрые ответы, Конерак и Ричард
  • 0
    Спасибо! Я не мог понять, почему моя работа cron перестала работать ... Это исправило это, но я не помню, чтобы редактировал это в Windows.
Показать ещё 7 комментариев
63

Или если вы хотите сделать это с помощью script:

sed -i 's/\r//' filename
  • 4
    +1, у меня работал на Debian Linux
  • 2
    не работаю на CentOS
Показать ещё 1 комментарий
38

Ваш файл конфигурации содержит окончание строк CRLF (стиль Windows) вместо простых строк строки LF (стиль unix). Передали ли вы его с помощью FTP-режима ASCII из Windows?

Вы можете использовать

dos2unix configure

чтобы исправить это или открыть его в vi и использовать :%s/^M//g;, чтобы подставить их все (используйте CTRL + V, CTRL + M, чтобы получить ^ M)

  • 2
    Нет, я использовал Linux для загрузки файла .gz. Понятия не имею, как туда попал CRLF.
  • 2
    vim поиск и замена, которые легче набрать: %s/\r$//g
Показать ещё 2 комментария
21

Вы можете использовать следующую команду для исправления

cat file_name.sh | tr -d '\r' > file_name.sh.new
  • 2
    это работает нормально на MacOS X 10.11 тоже
  • 1
    просто и элегантно Спасибо
11

Если вы не смогли найти команду запуска,

CentOS:

# yum install dos2unix*

# dos2unix filename.sh
dos2unix: converting file filename.sh to Unix format ...

Ubuntu/Debian:

# apt-get install dos2unix
8

Обычно это происходит, когда вы редактировали файл из Windows и теперь пытаетесь выполнить его с какого-либо компьютера на основе unix.

Решение, представленное на Linux Forum, работало для меня (много раз):

perl -i -pe's/\r$//;' <file name here>

Надеюсь, что это поможет.

PS: вам нужно установить perl на вашей машине unix/linux.

3

Благодаря комментарию pwc101 этот пост эта команда работала в Kali Linux.

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

Убедитесь, что вы заменили биты в скобках, {}. То есть {ctrl+m} означает нажатие клавиши Ctrl и клавиши M.

3

Далее из комментария Ричарда. Здесь простой способ конвертировать ваш файл в конец строки UNIX. Если вы похожи на меня, вы создали его в Windows Notepad, а затем попытались запустить его в Linux - плохая идея.

  • Загрузите и установите себе копию Notepad ++ (бесплатно).
  • Откройте файл script в Notepad ++.
  • Меню "Файл" Сохранить как
  • Сохранить как тип: Unix script file (*.sh;*.bsh)
  • Скопируйте новый .sh файл в свою систему Linux.
  • Maxe его исполняемый файл: chmod 755 the_script_filename
  • Запустите его с помощью ./the_script_filename

Любые другие проблемы попробуйте эту ссылку.

  • 3
    В Notepad ++ также есть настройка для окончания строки по умолчанию, перейдите: «Настройки-> Новый документ-> Формат» и выберите Unix. Одно предостережение: это только значение по умолчанию для новых файлов, оно не изменит формат, если обнаружит что-то еще в существующих файлах.
  • 1
    Вы можете переключать окончания строк с помощью функции Заменить в NOtepad ++. Включите «расширенный» режим поиска и введите «\ r \ n» в поиске и «\ n» в замене. Нажмите Заменить все!
Показать ещё 1 комментарий
3

Если вы находитесь в OS X, вы можете изменить окончания строк в XCode, открыв файл и выбрав

Вид → Текст → Конец строки → Unix

затем выберите "Сохранить". Это для XCode 3.x. Вероятно, что-то подобное в XCode 4.

2

Используйте команду dos2unix в linux для преобразования сохраненного файла. Пример:

dos2unix file_name
2

Вы также можете сделать это в Кейт.

  • Откройте файл
  • Откройте меню Сервис
  • Разверните подменю Конец строки
  • Выберите UNIX
  • Сохранить файл.
1

Просто добавив sh перед именем script, заставьте его работать в моем случае.

  • 1
    Спасибо вам большое за размещение этого. Ни одно из этих решений dos2unix / end-end-fix не сработало для меня. Я наконец запустил его, выполнив sudo sh ./MyScript.sh . Сделано в RedHat 6 / RHEL 6
0

Когда вы пишете свой script в среде Windows и хотите запустить его в среде unix, вам нужно быть осторожным в кодировании:

dos2unix $filePath

  • 0
    yum install dos2unix
0

Если вы используете TextMate или аналогичную программу, сохраните как, а затем в кодировках выберите LF вместо CRLF.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню