& ldquo; Не удается открыть & rdquo; файл / opt

Это мой первый пост. Я хотел попросить любую идею, чтобы решить мою проблему. Я использую Ubuntu 12.04 LTS, и моя цель - использовать программное обеспечение OpenFoam CFD.

Я пытаюсь выполнить скрипт под названием Allrun, соответствующий учебнику. Я использую команду sudo следующим образом.

sudo ./Allrun

Затем он запрашивает мой пароль, и после его введения внезапно появляется сообщение:

./Allrun: 5: .: Can't open /bin/tools/RunFunctions

Этот путь появляется в строке 5, как в сценарии, например:

. $WM_PROJECT_DIR/bin/tools/RunFunctions

- это $ WM_PROJECT_DIR переменная, определенная в opt / openfoam22 / etc / bashrc и указывающая на каталог:

$WM_PROJECT_DIR= /opt/openfoam222

(этот bashrc одновременно создается в файле ~ / .bashrc , и я могу использовать переменную в терминале, так что я предполагаю, что она все в порядке)

Я также попытался изменить файл RunFunctions с разрешениями rwx, и я обнаружил, что «ls -la» изменила его разрешения (они сделали), но ничего не решили.

Я новичок в Linux, и любая помощь будет отличной, заранее спасибо.

3
задан 21 November 2013 в 22:43

1 ответ

Кажется, что в момент исполнения переменная не определена; скрипт поиска файла /bin/tools/RunFunctions/, а не /opt/openfoam222/bin/tools/RunFunctions.

Обратите внимание, что неинтерактивные оболочки не загружают .bashrc по умолчанию , поэтому тот факт, что переменная определяется при использовании ее в интерактивном режиме, не является доказательством. Даже если вы запускаете сценарий из своей оболочки, переменные по умолчанию не экспортируются в вложенную оболочку, для этого их необходимо объявить export.

Попробуйте добавить строку наподобие

echo "DEBUG variable is $WM_PROJECT_DIR"

перед ошибочной строкой в ​​./Allrun и проверьте вывод. Если это проблема, вы должны явно указать файл в своем скрипте. Или добавьте

export WM_PROJECT_DIR 

, чтобы передать его в подоболочки.

Добавлено (после комментариев). Обратите внимание, что вы не должны явно указывать свои .bashrc в .profile (они имеют разное значение, а оболочка использует их в разных случаях, см., Например, здесь .)

Скрипты (не интерактивный) никогда не должен полагаться на вашу оболочку входа в систему для запуска. Если они нуждаются в конкретных файлах / определениях, они должны явно их указать. Для того, что вы знаете, он может быть вызван даже из другого типа оболочки или вообще без оболочки.

0
ответ дан 21 November 2013 в 22:43

Другие вопросы по тегам:

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