Ответ 1
Чтобы исправить, откройте свой script с помощью vi или vim и войдите в режим командной строки vi (клавиша Esc), затем введите следующее:
:set fileformat=unix
Наконец, сохраните его
:x!
или :wq!
Я пытаюсь установить lpng142 на мою систему с питанием 12. Кажется, проблема для меня. Я получаю эту ошибку
[[email protected] lpng142]# ./configure
bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
[[email protected] 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
Чтобы исправить, откройте свой script с помощью vi или vim и войдите в режим командной строки vi (клавиша Esc), затем введите следующее:
:set fileformat=unix
Наконец, сохраните его
:x!
или :wq!
Похоже, у вас есть файл окончания строки dos. Подсказка - ^M
.
Вам нужно повторно сохранить файл, используя окончание строки Unix.
У вас может быть утилита командной строки dos2unix
, которая также сделает это для вас.
Или если вы хотите сделать это с помощью script:
sed -i 's/\r//' filename
Ваш файл конфигурации содержит окончание строк CRLF (стиль Windows) вместо простых строк строки LF (стиль unix). Передали ли вы его с помощью FTP-режима ASCII из Windows?
Вы можете использовать
dos2unix configure
чтобы исправить это или открыть его в vi и использовать :%s/^M//g;
, чтобы подставить их все (используйте CTRL + V, CTRL + M, чтобы получить ^ M)
Вы можете использовать следующую команду для исправления
cat file_name.sh | tr -d '\r' > file_name.sh.new
Если вы не смогли найти команду запуска,
CentOS:
# yum install dos2unix*
# dos2unix filename.sh
dos2unix: converting file filename.sh to Unix format ...
Ubuntu/Debian:
# apt-get install dos2unix
Обычно это происходит, когда вы редактировали файл из Windows и теперь пытаетесь выполнить его с какого-либо компьютера на основе unix.
Решение, представленное на Linux Forum, работало для меня (много раз):
perl -i -pe's/\r$//;' <file name here>
Надеюсь, что это поможет.
PS: вам нужно установить perl на вашей машине unix/linux.
Если вы находитесь в OS X, вы можете изменить окончания строк в XCode, открыв файл и выбрав
Вид → Текст → Конец строки → Unix
затем выберите "Сохранить". Это для XCode 3.x. Вероятно, что-то подобное в XCode 4.
Далее из комментария Ричарда. Здесь простой способ конвертировать ваш файл в конец строки UNIX. Если вы похожи на меня, вы создали его в Windows Notepad, а затем попытались запустить его в Linux - плохая идея.
Unix script file (*.sh;*.bsh)
chmod 755 the_script_filename
./the_script_filename
Любые другие проблемы попробуйте эту ссылку.
Благодаря комментарию pwc101 этот пост эта команда работала в Kali Linux.
sed -i s/{ctrl+v}{ctrl+m}// {filename}
Убедитесь, что вы заменили биты в скобках, {}
. То есть {ctrl+m}
означает нажатие клавиши Ctrl и клавиши M.
Вы также можете сделать это в Кейт.
Используйте команду dos2unix в linux для преобразования сохраненного файла. Пример:
dos2unix file_name
Просто добавив sh перед именем script, заставьте его работать в моем случае.
Если вы используете TextMate или аналогичную программу, сохраните как, а затем в кодировках выберите LF
вместо CRLF
.
Когда вы пишете свой script в среде Windows и хотите запустить его в среде unix, вам нужно быть осторожным в кодировании:
dos2unix $filePath