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

EDITOR и VISUAL переменные являются известными переменными, наиболее часто используемыми с этой целью (cron, sudo, bash, и т.д. используйте его). Обычно, VISUAL имеет приоритет более чем EDITOR. Однако оба обычно используются в средах не-GUI. Ничто не препятствует тому, чтобы любой был программой GUI, но они обычно не.

можно обычно уважать настройки пользователя в настольной среде при помощи [1 113] xdg-open . xdg-open полагается на различную настольную среду определенные инструменты как [1 110] или kde-open (, Как xdg-open делает ее работу? ).

Так, в сценариях, просто сделайте:

xdg-open /some/file 
xdg-open proto://some/uri

104
задан 21.12.2016, 05:55

6 ответов

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

/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
178
ответ дан 11.10.2019, 14:27
  • 1
    Или установите и используйте dos2unix программа. – Keith Thompson 07.06.2013, 01:56
  • 2
    спасибо за это, все другие ответы, которые я нашел до сих пор, не помогло. Этот сделал это! – Amedeo 10.06.2014, 02:39
  • 3
    doesn' t должны быть Windows, я получил подобное сообщение после копирования сценария от OS X до Ubuntu... dos2unix работавший отлично в этом случае, тогда как, заменив ' \r' ни с чем было бы хуже, так как нет никаких ' \n' символы в файле. – Keith Thompson 14.09.2016, 20:39
  • 4
    Откройте его в gedit и, сделайте Сохранить Как и выберите " Окончание Строки: Unix/Linux" – Keith Thompson 27.11.2017, 14:11

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

22
ответ дан 11.10.2019, 14:27
  • 1
    этот сделал это для меня, спасибо – codeforester 06.08.2015, 22:53

Ваш файл имеет окончания строк в стиле DOS / Windows (CR LF) , но в Unix-подобных системах только управляющий символ LF используется в качестве разрыва строки.

Дополнительный управляющий символ 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 должен уметь правильно интерпретировать файл.

18
ответ дан 11.10.2019, 14:27
  • 1
    Спасибо, dos2unix также доступен для macOS через варево. – Amedeo 18.09.2018, 08:35

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

fromdos file

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

sudo apt-get install tofrodos
4
ответ дан 11.10.2019, 14:27

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

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

:set ff=unix
:wq

и все это прекрасно

5
ответ дан 11.10.2019, 14:27

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

2
ответ дан 11.10.2019, 14:27
  • 1
    +1 для этого, потому что это помогло мне с окончаниями строки MacOS. – Keith Thompson 03.04.2014, 14:52

Теги

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