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

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

Сценарий, расположенный в .../Documents/LOG, является:

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

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

chmod 755 my_script

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

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

which bash

/ Бен / Баш

а также

echo $PATH

/ USR / местные / SBIN: / USR / местные / бен: / USR / SBIN: / USR / бен: / SBIN: / бен: / USR / игры: / USR / бен / тк

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

11 ответов

Решение

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

Попробуйте запустить dos2unix по сценарию:

http://dos2unix.sourceforge.net/

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

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

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

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

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

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

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

Тогда попробуй

./scriptname.sh

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

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

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

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

Правка -> Преобразование EOL -> Формат UNIX/OSX

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

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

Проблема с окончанием строки DOS. Следующие будут конвертировать его для Unix

dos2unix file_name

NB: вам может понадобиться сначала установить dos2unix с yum install dos2unix

Другой способ сделать это с помощью sed Команда для поиска и замены конечных символов строки DOS в формате Unix:

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

У вашего файла есть окончания строки Windows, что сбивает с толку Linux.

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

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

Я смог решить проблему, открыв скрипт в Gedit и сохранив его с Line Ending опция:

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

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

подсказка

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

Eclipse изменить кодировку файла

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

Настройки рабочего пространства Eclipse

Atom имеет встроенный селектор конца строки

Более подробная информация здесь: https://github.com/atom/line-ending-selector

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

$ php ./my_script

Нет необходимости менять окончания строк.

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