Intereting Posts
Прочитайте файл с двумя столбцами, rsync каждую строку от столбца 1 до столбца 2 Есть ли почтовый клиент командной строки и приложение для автоматической загрузки в файл? Как я * надежно * и * просто * получить текущее имя интерпретатора оболочки? Есть ли инструмент, который я могу использовать для создания диаграммы архитектуры моей системы? Как проверить текущую политику планирования во встроенной Linux? Драйвер RT3070 не будет компилироваться xclock с наносекундным (или дробным вторым) разрешением SFTP-сервер на RHEL6 отключается на ls Как найти и заменить содержимое для нескольких файлов в текущем каталоге с помощью сценария оболочки или Linux? Как я могу разделить тома в обычный файл без цикла? Преобразование Xcursor в PNG Постоянное именование NIC во FreeBSD Обратные носки5 с использованием SSH Ядро Linux 3.14: Не удается найти LILO Каковы причины, по которым каждая строка в Makefile должна выполняться в отдельной оболочке?

проблема возникает при установке скриптов moses

Возможный дубликат:
/ bin / sh: ./check-dependencies.pl: не найден – но check-dependencies.pl существует!

Я получаю ошибку, когда компилирую moses-script , который читается следующим образом:

 minakshi@minakshi-Vostro-3500:~/Desktop/monu/moses/scripts$ make release # Compile the parts make all make[1]: Entering directory `/home/minakshi/Desktop/monu/moses/scripts' # Building memscore may fail eg if boost is not available. # We ignore this because traditional scoring will still work and memscore isn't used by default. cd training/memscore ; \ ./configure && make \ || ( echo "WARNING: Building memscore failed."; \ echo 'training/memscore/memscore' >> ../../release-exclude ) checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking for g++... g++ checking whether the C++ compiler works... yes checking for C++ compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking for style of include used by make... GNU checking dependency style of g++... gcc3 checking for gcc... gcc checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking dependency style of gcc... gcc3 checking for boostlib >= 1.31.0... yes checking for cos in -lm... yes checking for gzopen in -lz... yes checking for cblas_dgemm in -lgslcblas... no checking for gsl_blas_dgemm in -lgsl... no checking how to run the C++ preprocessor... g++ -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking n_gram.h usability... no checking n_gram.h presence... no checking for n_gram.h... no checking for size_t... yes checking for ptrdiff_t... yes configure: creating ./config.status config.status: creating Makefile config.status: creating config.h config.status: config.h is unchanged config.status: executing depfiles commands make[2]: Entering directory `/home/minakshi/Desktop/monu/moses/scripts/training/memscore' make all-am make[3]: Entering directory `/home/minakshi/Desktop/monu/moses/scripts/training/memscore' make[3]: Leaving directory `/home/minakshi/Desktop/monu/moses/scripts/training/memscore' make[2]: Leaving directory `/home/minakshi/Desktop/monu/moses/scripts/training/memscore' touch release-exclude # No files excluded by default pwd=`pwd`; \ for subdir in cmert-0.5 phrase-extract symal mbr lexical-reordering; do \ make -C training/$subdir || exit 1; \ echo "### Compiler $subdir"; \ cd $pwd; \ done make[2]: Entering directory `/home/minakshi/Desktop/monu/moses/scripts/training/cmert-0.5' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/home/minakshi/Desktop/monu/moses/scripts/training/cmert-0.5' ### Compiler cmert-0.5 make[2]: Entering directory `/home/minakshi/Desktop/monu/moses/scripts/training/phrase-extract' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/home/minakshi/Desktop/monu/moses/scripts/training/phrase-extract' ### Compiler phrase-extract make[2]: Entering directory `/home/minakshi/Desktop/monu/moses/scripts/training/symal' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/home/minakshi/Desktop/monu/moses/scripts/training/symal' ### Compiler symal make[2]: Entering directory `/home/minakshi/Desktop/monu/moses/scripts/training/mbr' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/home/minakshi/Desktop/monu/moses/scripts/training/mbr' ### Compiler mbr make[2]: Entering directory `/home/minakshi/Desktop/monu/moses/scripts/training/lexical-reordering' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/home/minakshi/Desktop/monu/moses/scripts/training/lexical-reordering' ### Compiler lexical-reordering ## All files that need compilation were compiled make[1]: Leaving directory `/home/minakshi/Desktop/monu/moses/scripts' /bin/sh: ./check-dependencies.pl: not found make: *** [release] Error 127 

Мы не знаем, почему эта ошибка возникает? Файл check-dependencies.pl существует в папке скриптов …

Моя догадка: ./check-dependencies.pl начинается с #!/usr/local/bin/perl . Измените первую строку на #!/usr/bin/perl .

Объяснение: при запуске программы ядро ​​загружает файл в память и выполняет его. Однако многие исполняемые файлы (большинство из них, по сути) не могут быть выполнены напрямую, но требуют другой программы, загрузчика:

  • Большинство двоичных программ динамически связаны и должны быть загружены динамическим компоновщиком ( /lib/ld-linux.so.2 для 32-разрядных программ, /lib64/ld-linux-x86-64.so.2 для 64-разрядных программы), которая занимается загрузкой библиотек, запрошенных программой.
  • Скрипты должны быть загружены их интерпретатором.

Ядро распознает скрипт, потому что он начинается с строки shebang . Строка shebang – это первая строка скрипта и состоит из символов #! а затем полный путь к интерпретатору. Необязательно строка также может содержать пробел, за которым следует один аргумент, который передается интерпретатору.

Например, если скрипт начинается с #!/usr/local/bin/perl -w , тогда, когда ядру сообщается выполнить этот скрипт, он запускает /usr/local/bin/perl -w /path/to/script , Если он не может выполнить /usr/local/bin/perl , вы получите сообщение об ошибке. Поскольку ядро ​​может сообщать только код ошибки и никакой дополнительной информации, информация из ядра идентична, если сценарий не существует или если интерпретатор не существует.

Некоторые оболочки дважды проверяют состояние ошибки в этом случае и печатают другое сообщение, такое как «плохой интерпретатор», когда скрипт существует, но ядро ​​сообщает «файл не найден». Но оболочка сценариев по умолчанию на Ubuntu ( /bin/sh ) – это Dash, оболочка, которая предназначена для быстрого выполнения сценариев и не имеет дополнительных функций удобства, подобных этому. Таким образом, вы получаете отчет «файл не найден».

Многие скрипты Perl начинаются с #!/usr/local/bin/perl , что является перком для Perl на большинстве установок, отличных от Linux. Возможно, вам будет полезно создать это на вашей машине – сделать его символической ссылкой на /usr/bin/perl и сделать то же самое для других переводчиков, пока вы на нем.

 cd /usr/local/bin ln -s ../../../bin/bash ../../bin/perl ../../bin/python ../../bin/ruby . 

Когда вы пишете скрипт, вы можете избежать этой проблемы, написав строку shebang, например #!/usr/bin/env perl . Это можно сделать, только если вы не передаете аргументы интерпретатору. См. Почему лучше использовать «#! / Usr / bin / env NAME» вместо «#! / Path / to / NAME» в качестве моего shebang? для обсуждения этой возможности.