Не удалось выполнить файл .sh: / bin / bash ^ M: плохой интерпретатор

Я хотел выполнить сценарий оболочки:

-rwxr-x--x 1 root root   17234 Jun  6 18:31 create_mgw_3shelf_6xIPNI1P.sh

Я пытался выполнить стандартную процедуру, но я получил эту ошибку:

./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0 
DEBUG   cd/etc/opt/ldapfiles/ldif_in ;
./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
**ERROR  sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory**

Что это значит? Я делал это как root пользователь из группы root.

Означает ли это, что файл не имеет правильного разрешения для пользователя root?

167
задан 21 December 2016 в 06:55

7 ответов

Это не проблема с разрешениями, вы не получаете сообщение о разрешениях

/bin/bash^M: bad interpreter: No such file or directory

Сценарий указывает, что он должен выполняться оболочкой, расположенной по адресу / bin / bash ^ M . Такого файла нет: он называется / bin / bash .

^ M - это символ возврата каретки . Linux использует символ перевода строки для обозначения конца строки, тогда как Windows использует двухсимвольную последовательность CR LF. В вашем файле есть окончания строки Windows, что сбивает Linux с толку.

Удалите ложные символы CR. Вы можете сделать это с помощью следующей команды:

sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh
259
ответ дан 21 December 2016 в 06:55

Выполните vi <ваш сценарий> .

затем : установить список ; он отобразит любой из специальных символов в вашем скрипте.

затем замените символ:

:% s / ^ M // gc [для ввода ^ M нажмите Ctrl + v + m ]

5
ответ дан 21 December 2016 в 06:55

В vim вы также можете использовать : set ff = unix и затем сохраните файл, или : установите ff = dos , чтобы снова получить форматирование DOS.

34
ответ дан 21 December 2016 в 06:55

Как объяснялось в других ответах, это проблема формата. Итак, ответ состоит в том, чтобы изменить формат окончания строк в стиле DOS на стиль Unix. Это еще один простой способ исправить ваш файл «на месте»

fromdos file

Он доступен в пакете tofrodos :

sudo apt-get install tofrodos
5
ответ дан 21 December 2016 в 06:55

Проблема заключается в том, что вы редактируете с помощью Dos!

откройте файл с помощью vi затем установите unix с помощью:

:set ff=unix
:wq

и все в порядке

11
ответ дан 21 December 2016 в 06:55

Таны файлд DOS / Windows загварын мөрийн төгсгөлүүд (CR LF) байгаа боловч Unix-тэй төстэй системүүд дээр зөвхөн LF хяналтын тэмдэгтийг мөрийн завсарлага болгон ашигладаг.

The нэмэлт CR хяналтын тэмдэгт таны гаралтад ^ M гэж кодлогдсон харагдаж байна. cat -A create_mgw_3shelf_6xIPNI1P.sh ажиллуулж байхдаа үүнийг харж болно.

DOS / Windows стилийн мөрийн төгсгөлийг Unix хэв маягт хөрвүүлэхийн тулд dos2unix гэсэн хэрэгсэл байдаг. Та үүнийг ашиглан дараах зүйлийг суулгана уу:

sudo apt-get install dos2unix

Дараа нь та файлын мөрийн төгсгөлийг

dos2unix FILENAME
unix2dos FILENAME

ашиглан хоёр аргаар хөрвүүлэх боломжтой болно. Таны тохиолдолд доорх командыг ажиллуулаад, скрипт файлыг газар дээр нь хөрвүүлэх болно:

dos2unix create_mgw_3shelf_6xIPNI1P.sh

Үүний дараа Bash файлыг зөв тайлбарлах чадвартай байх ёстой.

27
ответ дан 21 December 2016 в 06:55

Вы также можете использовать gedit для удаления нежелательных символов. В меню «Файл» выберите «Сохранить как» и установите тип окончания строки unix / Linux.

3
ответ дан 21 December 2016 в 06:55

Другие вопросы по тегам:

Похожие вопросы: