nixp.ru v3.0

24 января 2017,
вторник,
08:09:58 MSK

DevOps с компанией «Флант»
sinai написал 2 июня 2006 года в 18:48 (691 просмотр) Ведет себя как мужчина; открыл 2 темы в форуме, оставил 3 комментария на сайте.

Прошу уважаемых гуру помочь со странной ошибкой, которую мне выдает недавно установленная на одну из машин Mandriva 2006. При попытке запуска скриптов (из Konsole, KDE 3.4):

1. на строчку #!/bin/bash ругается: bad interpreter: No such file or directory

2. при удалении из файла скрипта этой строчки выполняет, но не все команды.

Привожу распечатку при ошибке выполения элементарного скрипта:

[dmitry@localhost b2]$ echo $SHELL

/bin/bash

[dmitry@localhost b2]$ whereis bash

bash: /bin/bash /usr/share/man/man1/bash.1.bz2

[dmitry@localhost b2]$ ls -l

итого 4 -rwxrwxr-x 1 dmitry dmitry 76 Июн 2 17:18 s1.sh*

[dmitry@localhost b2]$ cat s1.sh

#!/bin/bash

echo 'test only'

for i in 1 2 3 4 5 do

echo «$i»

done

[dmitry@localhost b2]$ ./s1.sh

: bad interpreter: No such file or directory

[dmitry@localhost b2]$ cat s1.sh

echo 'test only'

for i in 1 2 3 4 5 do

echo «$i»

done

[dmitry@localhost b2]$ ./s1.sh

test only

./s1.sh: line 6: syntax error: unexpected end of file

В Mandrake 9.1, который пока еще стоИт на других машинах, все это работает без проблем.

Помогите, пожалуйста, понять и устранить причину. Заранее благодарен.

Genie


#!/bin/sh
## да-да. /bin/sh
echo 'test only'  
for i in 1 2 3 4 5
do
## либо: обрати внимание на ";"
## for i in 1 2 3 4 5; do
  echo "$i"  
done

что не понятно — читать man bash

sinai

>#!/bin/sh

>## да-да. /bin/sh

Это я уже пробовал. Не помогает. Опять говорит:

: bad interpreter: No such file or directory

хотя имеется у меня и /bin/sh

>do

>## либо: обрати внимание на «;»

>## for i in 1 2 3 4 5; do

> echo «$i»

>done

Спасибо за поправку, но это тоже не помогло. В Mandrake 9.1 работало и без «;», здесь по-прежнему не работает. После добавления «;» пишет:

[dmitry@localhost b2]$ cat ./s1.sh

for i in 1 2 3 4 5; do

echo «$i»

done

[dmitry@localhost b2]$ ./s1.sh

./s1.sh: line 5: syntax error: unexpected end of file

Но если пробовать не из файла, а прямо из командной строки, то все работает, как надо:

[dmitry@localhost ~]$ for i in 1 2 3 4 5; do echo «$i»; done

1

2

3

4

5

Значит, проблема все же в том, что не «распознается» #!/bin/bash (либо #!/bin/sh) в том файле, который обрабатывается?..

Fatal

Ты тот же самый файл пробуешь запускать под Mandrake 9.1 и Mandriva 2006?

Просто может быть такое, что в скрипте могут быть виндовые переносы строки, которые обозначаются как ^M.

В редакторе, в котором ты пишешь скрипты, поставь перенос строк для UNIX. Или для чисоты эксперемента попробуй набить простую прогу с помощью VIM, прога типа

#!/bin/bash

echo Hello, World!

Ругнёться ли он на #!/bin/bash?

sinai

Гениально, Fatal!

Спасибо, все заработало!

> Просто может быть такое, что в скрипте могут быть виндовые переносы строки,

> которые обозначаются как ^M.

> В редакторе, в котором ты пишешь скрипты, поставь перенос строк для UNIX.

Да, так оно и было! Вчера мне пришлось править один видоузовский файл, и я поставил «конец строк -> Windows». Сейчас исправил на «Конец строк -> UNIX» и все работает! Спасибо, дорогой!

Спасибо и другому ответившему, т.к. с его подачи я сидел читал man bash и нашел для себя немало нового и интересного. :-)

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.