Скрипт Bash и /bin/bash ^ M: плохой интерпретатор: нет такого файла или каталога

Я изучаю этот учебник, чтобы узнать bash scripts, чтобы автоматизировать несколько задач для меня. Я подключаюсь к серверу с помощью шпатлевки.

script, расположенный в .../Documents/LOG, равен:

#!/bin/bash
# My first script
echo "Hello World!"

И я выполнил следующее для прав на чтение/запись/выполнение

chmod 755 my_script

Затем, когда я вхожу в ./my_script, я получаю ошибку, указанную в заголовке.

Некоторые подобные вопросы хотели увидеть их, поэтому я думаю, что они могут помочь:

which bash

/бен/bash

и

echo $PATH

/USR/локальные/SBIN:/USR/локальные/бен:/USR/SBIN:/USR/бен:/SBIN:/бен:/USR/игры:/USR/бен/тк

Я попытался добавить текущий каталог в PATH, но это не работает.

Ответ 1

Я видел эту проблему при создании сценариев в Windows env, а затем портировал их для запуска в среде Unix.

Попробуйте запустить dos2unix для скрипта:

http://dos2unix.sourceforge.net/

Или просто перепишите скрипт в вашей среде Unix, используя vi, и протестируйте.

Unix использует разные окончания строк, поэтому не может прочитать файл, который вы создали в Windows. Следовательно, он видит ^ M как недопустимый персонаж.

Если вы хотите записать файл в Windows, а затем перенести его, убедитесь, что ваш редактор настроен на создание файлов в формате UNIX.

В notepad++ в правом нижнем углу экрана указывается формат документа. По умолчанию будет сказано Dos\Windows. Чтобы изменить его, перейдите на

  • settings-> настройки
  • вкладка нового документа/каталога по умолчанию
  • выберите формат Unix и закройте
  • создать новый документ

Ответ 2

Запустите следующую команду в терминале

sed -i -e 's/\r$//' scriptname.sh

Затем попробуйте

./scriptname.sh

Он должен работать.

Ответ 3

Если вы используете Sublime Text в Windows или Mac для редактирования ваших скриптов:

Нажмите View > Line Endings > Unix и сохранить файл снова.

enter image description here

Ответ 4

Это вызвано редактированием файла в окнах и импортом и исполнением в unix.

dos2unix -k -o filename должен сделать трюк.

Ответ 5

В блокноте ++ вы можете установить его для файла, нажав

Изменить → Преобразование EOL → Формат UNIX/OSX

enter image description here

Ответ 6

проблема заключается в завершении вывода dos. Следующее преобразует его для unix

dos2unix file_name

Примечание: вам может потребоваться сначала установить dos2unix с помощью yum install dos2unix

Другой способ сделать это - использовать команду sed для поиска и замены символов окончания строки dos в формате unix:

$sed -i -e 's/\r$//' your_script.sh

Ответ 7

В вашем файле есть конечные строки Windows, которые запутывают Linux.

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

 $ sed -i -e 's/\r$//' setup.sh

Ответ 8

Мне удалось решить проблему, открыв script в Gedit и сохранив ее с помощью соответствующей опции Line Ending:

Файл > Сохранить как...

В левом нижнем углу подсказки Save As отображаются раскрывающиеся меню для кодировки символов и окончания строки. Измените окончание строки с Windows на Unix/Linux, затем сохраните.

gedit "Save As" prompt]

Ответ 9

Для пользователей Eclipse вы можете либо изменить кодировку файла непосредственно из меню File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶):

Кодирование файла изменения Eclipse

Или измените панель New text file line delimiter на Other: Unix на панели Window > Preferences > General > Workspace:

Параметры рабочего пространства Eclipse

Ответ 11

Я разрабатываю в Windows и Mac/Linux одновременно, и я избегаю этой ^ M-ошибки, просто запуская свои сценарии, как в Windows:

$ php ./my_script

Не нужно менять окончание строк.