Сценарий Bash: плохой интерпретатор

Вопрос: Я получаю это сообщение об ошибке:

экспорт: плохой интерпретатор: Никакой такой файл или каталог

когда я выполняю этот сценарий удара:

#!/bin/bash
MONO_PREFIX=/opt/mono-2.6
GNOME_PREFIX=/opt/gnome-2.6
export DYLD_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_PATH
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$MONO_PREFIX/include:$GNOME_PREFIX/include
export ACLOCAL_PATH=$MONO_PREFIX/share/aclocal
export PKG_CONFIG_PATH=$MONO_PREFIX/lib/pkgconfig:$GNOME_PREFIX/lib/pkgconfig
PATH=$MONO_PREFIX/bin:$PATH
PS1="[mono-2.6] \w @ "

Но путь удара, кажется, корректен:

asshat@IS1300:~/sources/mono-2.6# which bash
/bin/bash

asshat@IS1300:~# cd sources/
asshat@IS1300:~/sources# cd mono-2.6/
asshat@IS1300:~/sources/mono-2.6# ./mono-2.6-environment
export: bad interpreter: No such file or directory
asshat@IS1300:~/sources/mono-2.6# ls
download  mono-2.4  mono-2.4-environment  mono-2.6  mono-2.6-environment
asshat@IS1300:~/sources/mono-2.6# cp mono-2.6-environment mono-2.6-environment.sh
asshat@IS1300:~/sources/mono-2.6# ./mono-2.6-environment.sh
export: bad interpreter: No such file or directory
asshat@IS1300:~/sources/mono-2.6# ls
download  mono-2.4-environment  mono-2.6-environment
mono-2.4  mono-2.6              mono-2.6-environment.sh
asshat@IS1300:~/sources/mono-2.6# bash mono-2.6-environment
asshat@IS1300:~/sources/mono-2.6#

Что я делаю неправильно? Или действительно ли это - Ясная ошибка Lynx?

Я сделал chmod + x

20
задан Stefan Steiger 16 December 2010 в 12:24
поделиться

3 ответа

Первая строка, #! / Bin / bash , сообщает Linux, где найти интерпретатор. Скрипт также должен исполняться с chmod + x script.sh , что, похоже, вы и сделали.

Весьма вероятно, что вы создали этот файл с помощью редактора Windows, который поместит в конце каждой строки. Это стандарт для dos / windows. OS X поместит в конце каждой строки. Однако в Unix / Linux стандарт просто помещает в конец строки.

Linux теперь ищет файл с именем / bin / bash для интерпретации файла, где - символ возврата каретки, который является допустимым символом файла в Linux. Такого файла не существует. Отсюда и ошибка.

Решение: Отредактируйте файл в редакторе Linux и избавьтесь от лишних . При редактировании файла в Windows обычно работает инструмент dos2unix .

41
ответ дан 29 November 2019 в 23:11
поделиться

Вы запускали его так (вы упомянули chmod + x)

. /path/to/it

или вот так:

./it

?

У меня есть скрытое подозрение, что ваш код выполняется в новом процессе, и все, что вы ему сказали был потерян. Следовательно, переменные не будут раскрыты в вашей текущей оболочке. Однако это не объясняет обнаруженную вами ошибку неверный интерпретатор . Я думаю, у вас также есть проблема с терминалом (как в терминале, с которым вы разговаривали с cat ).

Тот факт, что в вашем приглашении не было того, что было сказано:

`PS1="[mono-2.6] \w @` "

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

0
ответ дан 29 November 2019 в 23:11
поделиться

Может ли сценарий использовать символы новой строки Dos?

Попробуйте запустить на нем dos2unix.

8
ответ дан 29 November 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: