Прошу уважаемых гуру помочь со странной ошибкой, которую мне выдает недавно установленная на одну из машин 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, который пока еще стоИт на других машинах, все это работает без проблем.
Помогите, пожалуйста, понять и устранить причину. Заранее благодарен.
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
что не понятно — читать man bash
>#!/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) в том файле, который обрабатывается?..
Ты тот же самый файл пробуешь запускать под Mandrake 9.1 и Mandriva 2006?
Просто может быть такое, что в скрипте могут быть виндовые переносы строки, которые обозначаются как ^M.
В редакторе, в котором ты пишешь скрипты, поставь перенос строк для UNIX. Или для чисоты эксперемента попробуй набить простую прогу с помощью VIM, прога типа
#!/bin/bash
echo Hello, World!
Ругнёться ли он на #!/bin/bash?
Гениально, Fatal!
Спасибо, все заработало!
> Просто может быть такое, что в скрипте могут быть виндовые переносы строки,
> которые обозначаются как ^M.
> В редакторе, в котором ты пишешь скрипты, поставь перенос строк для UNIX.
Да, так оно и было! Вчера мне пришлось править один видоузовский файл, и я поставил «конец строк -> Windows». Сейчас исправил на «Конец строк -> UNIX» и все работает! Спасибо, дорогой!
Спасибо и другому ответившему, т.к. с его подачи я сидел читал man bash и нашел для себя немало нового и интересного. :-)