4

У меня проблемы с запуском скрипта .sh в Windows с использованием Cygwin.

Когда я запускаю файл: ./build.sh -s srv.txt я получаю: ./build.sh: line 1: #!/bin/bash: No such file or directory

Можете ли вы, ребята, помочь мне, что это значит. 1-я строка прокомментирована :)

Благодарю.

5 ответов5

4

У меня была та же проблема с запуском Cygwin под Windows. Для меня это никак не связано с дорожкой.

Это было все, что связано с кодировкой. Я использовал UTF-8 с BOM (Byte Order Mark). Спецификация заставляла его задыхаться. Как только я его убрал, он работал без нареканий.

Я обновил кодировку с помощью Notepad++:

Кодировка -> Кодировка в UTF-8 без спецификации

Команда which bash вывела:

/usr/bin/bash

Однако он все еще был в состоянии решить

#!/bin/bash
3

Обычно это означает, что в конце каждой строки вашего файла есть ^M (возврат каретки) или другая проблема с кодировкой, которая предотвращает #!/bin/bash интерпретируется правильно.

Возьмите копию файла и сохраните ее в виде обычного ASCII с помощью редактора по вашему выбору, чтобы удалить как можно больше кодировки, отличной от ASCII. Кроме того, попробуйте сохранить его в формате «UNIX», если редактор поддерживает это.

2

Вы пытались бежать ...

sh build.sh

Вместо...

./build.sh

Я не уверен (я никогда не запускал Cygwin), но кажется, что /bin/bash - это не путь в вашей машине, поэтому ваш шебанг (#!/bin/bash) дует программа.

Если вы запускаете программу, используя sh шебанг следует рассматривать как комментарий.

Надеюсь это поможет.

1

#!/bin/bash (называемый шебанг, сокращение от Crash (#) Bang (!), сообщает оболочке, какую программу использовать для выполнения рассматриваемого сценария. Вы увидите это с помощью сценариев Perl (#!/usr/bin/perl), Python (#!/usr/bin/python) или php (#!/usr/bin/php).

В вашей ситуации это может быть несколько вещей. Либо оболочка 'bash' не установлена, либо сценарий находится в нераспознанном формате, который вы не видите.

Во-первых, существует ли bash? Дайте нам результаты этого: ls -l /bin/bash

Во-вторых, что в сценарии? Дайте нам первые 2 строки этого: od -c build.sh Мы ищем скрипт в неверном формате. Windows любит CRLF' или \r\n для конца строки, в то время как Linux любит только LF или \n (см. Также: http://en.wikipedia.org/wiki/Newline)

Честно говоря, я не знаю, нравится ли CYGWIN окончание строк Windows или Linux, но это весьма вероятная причина вашей проблемы.

Опять же, дайте нам вывод od -c build.sh и мы посмотрим, что случилось .

0

В прошлом у меня были проблемы с /M в скриптах python, написанных на коробке с windows, и при попытке использовать их на коробке с linux. Я использовал dos2unix, чтобы конвертировать файлы, чтобы они работали на Linux. Если возврат каретки (или другие проблемы форматирования текста в Windows) существуют и являются причиной проблемы, это может помочь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .