Это мой первый пост. Я хотел попросить любую идею, чтобы решить мою проблему. Я использую 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, и любая помощь будет отличной, заранее спасибо.
Кажется, что в момент исполнения переменная не определена; скрипт поиска файла /bin/tools/RunFunctions/
, а не /opt/openfoam222/bin/tools/RunFunctions
.
Обратите внимание, что неинтерактивные оболочки не загружают .bashrc по умолчанию , поэтому тот факт, что переменная определяется при использовании ее в интерактивном режиме, не является доказательством. Даже если вы запускаете сценарий из своей оболочки, переменные по умолчанию не экспортируются в вложенную оболочку, для этого их необходимо объявить export
.
Попробуйте добавить строку наподобие
echo "DEBUG variable is $WM_PROJECT_DIR"
перед ошибочной строкой в ./Allrun и проверьте вывод. Если это проблема, вы должны явно указать файл в своем скрипте. Или добавьте
export WM_PROJECT_DIR
, чтобы передать его в подоболочки.
Добавлено (после комментариев). Обратите внимание, что вы не должны явно указывать свои .bashrc
в .profile
(они имеют разное значение, а оболочка использует их в разных случаях, см., Например, здесь .)
Скрипты (не интерактивный) никогда не должен полагаться на вашу оболочку входа в систему для запуска. Если они нуждаются в конкретных файлах / определениях, они должны явно их указать. Для того, что вы знаете, он может быть вызван даже из другого типа оболочки или вообще без оболочки.