Скрипт 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]()
Ответ 10
У Atom есть встроенный селектор пакетов завершения
Подробнее здесь: https://github.com/atom/line-ending-selector
Ответ 11
Я разрабатываю в Windows и Mac/Linux одновременно, и я избегаю этой ^ M-ошибки, просто запуская свои сценарии, как в Windows:
$ php ./my_script
Не нужно менять окончание строк.