Когда Вы выполняете программу, проверки ядра, запускается ли она некоторой волшебной последовательностью байта. Если исполняемый файл запускается с #!
, ядро интерпретирует остальную часть строки как название интерпретатора. Если исполняемый файл запускается с \177ELF
(где \177
байт 127), он загружает файл как исполняемый файл ELF; это - нормальный вид в большинстве систем Unix в наше время.
Если ядро не распознает формат файла, оно отказывается выполнять файл и возвращает ошибку ENOEXEC (Исполнительная ошибка формата). Когда оболочка замечает, что, берет себя для выполнения программы как сценария оболочки.
Для наблюдения этого в действии добавьте несколько команд к сценарию:
ps l $$
ls -l /proc/$$/exe
echo hello
(Это для Linux, корректируйтесь для других нельдов.) Затем пытаются запустить тот скрипт от различных оболочек. Вы будете видеть, что некоторые оболочки порождают новые экземпляры себя для выполнения сценария (удар, ksh93), в то время как другие мечут икру /bin/sh
(тире, pdksh, zsh).
Когда Вы добавляете это к /etc/profile.d
разногласия каталога являются переменной $MKL_TARGET_ARCH
не установлен или еще не был установлен, таким образом, все if/else
блок по существу пропускается.
Можно протестировать эту теорию путем временной установки $MKL_TARGET_ARCH
чуть выше if/else
оператор и попытка, входящая в систему снова, чтобы видеть, работало ли это.
MKL_TARGET_ARCH="..something.."
if [ -z "${MKL_TARGET_ARCH}" ] ; then
Я не обладаю этим компилятором, таким образом, я не могу предоставить Вам точную подробную информацию, но я имел дело с устанавливанием инженерных приложений к лучшему часть 15 лет, таким образом, я несколько исключительно знаком с доменом.
В любом случае, когда Вы устанавливаете эти типы инструментов Вы обычно или должны создать Ваш собственный файл среды, или каждому предоставляют. Я нашел это сообщение относительно компилятора Фортрана Intel, но я буду удивлен, ли продукты то, что отличающиеся.
При просмотре этого сообщения, Вы заметите шаг после установки (install.sh
), где файл копируется в /etc/profile.d
. Этот файл содержит установку среды, которая должна произойти.
cp /opt/intel/Compiler/11.1/056/bin/ia32/iccvars_ia32.sh /etc/profile.d/
Это было бы мое подозрение, что шаг, подобный этому, должен произойти для этого продукта также. Двойная проверка Ваша установка была сделана с помощью распределения определенные шаги от этой страницы:
если
.
работы, ноsource
не делает затем, Вы могли бы иметь дело с Оболочкой Bourne и не Bash. Bash поддерживает обоих тогда как Оболочка Bourne (/bin/sh
) не делает.
Если Вы взглянули на этот документ затем, Вы видите, что это, кажется, точно, где Вы проблема лежите.
Ubuntu 12.0x изменила ссылку для/bin/sh от/bin/bash до/bin/dash. Сценарии установки Intel для 13.0.0.079 ссылок/bin/sh, НО принимают/требуют, что это - граница или удар (sh или удар), но не совместимо с тире.
compilervars.sh
который делает задание. Кроме того, я не хочу копировать его, потому что, если я просто называю его, я всегда получаю актуальнейшую версию даже после обновления. Наконец, никакой файл не копируется во время установки на/etc/profile.d
но Вы получаете сообщение, что необходимо получить переменные сценарии соответственно. Спасибо за Ваш ответ. – halirutan 29.10.2013, 18:41compilervars.sh
сценарий, и вставленный в этот сценарий/etc/profile.d
, был бы другой пример. – slm♦ 29.10.2013, 18:49LD_LIBRARY_PATH
сброшен. Если можно сэкономить минуту и иметь идею, как отладить это, я нахожусь в чате. – halirutan 29.10.2013, 18:51set -x
перед командами в этих файлах для включения более подробного сообщения отладки, поскольку они получены. Вы обычно включаете его сset -x
и отключите его сset +x
. – slm♦ 29.10.2013, 18:57