Bash скрипт и /bin/bash^M: лош интерпретатор: Няма такъв файл или директория

Чрез този урок се уча да научавам bash scripts да автоматизирам няколко задачи за мен. Свързвам се със сървър с помощта на putty.

Скриптът, който се намира в .../Documents/LOG, е:

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

И изпълних следното за разрешения за четене/запис/изпълнение

chmod 755 my_script

След това, когато въведа ./my_script, получавам грешката, посочена в заглавието.

Някои подобни въпроси искаха да видят тези, така че мисля, че могат да помогнат:

which bash

/bin/bash

и

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/bin/mh

Опитах се да добавя текущата директория към PATH, но това не работи..

Решение

Срещал съм този проблем при създаване на скриптове в Windows env и последващото им пренасяне за работа в среда на Unix.

Опитайте да стартирате dos2unix за скрипта:

http://dos2unix.sourceforge.net/

Или просто пренапишете скрипта във вашия Unix env с помощта на vi и тествайте.

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

Ако искате да напишете файл в Windows и след това да го пренесете, уверете се, че редакторът ви е настроен да създава файлове във формат UNIX.

В Notepad++ в долния десен ъгъл на екрана ви се показва форматът на документа. По подразбиране там е записано Dos\Windows. За да го промените, отидете на

  • settings->preferences
  • Нов документ / таб Директория по подразбиране
  • изберете формата като unix и затворете
  • създаване на нов документ
Коментари (12)

Ако използвате Sublime Text в Windows или Mac, за да редактирате скриптовете си:

Кликнете върху Преглед > Краища на редове > Unix и запазете файла отново.

Коментари (5)

Това се дължи на редактирането на файла в Windows и импортирането и изпълнението му в Unix.

dos2unix -k -o filename трябва да свърши работа.

Коментари (1)