-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Α, ¶)
:
Или изменить New text file line delimiter
в Other: Unix
на Window > Preferences > General > Workspace
панель:
Atom имеет встроенный селектор конца строки
Более подробная информация здесь: https://github.com/atom/line-ending-selector
Я разрабатываю для Windows и Mac/Linux одновременно, и я избегаю этой ^M-ошибки, просто выполняя мои сценарии, как я делаю в Windows:
$ php ./my_script
Нет необходимости менять окончания строк.