Глобальная переменная не загружается автоматически из.profile
Чтобы настроить CUDA 9.1, я прочитал, что удобно добавить папку для его установки в PATH
а также LD_LIBRARY_PATH
, как:
PATH="/usr/local/cuda-9.1/bin:$PATH"
LD_LIBRARY_PATH="/usr/local/cuda-9.1/lib64:$LD_LIBRARY_PATH"
После этого и этого SE ответов я попытался отредактировать мой .profile
файл, добавляющий последние строки, как показано ниже.
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
# settings for CUDA
PATH="/usr/local/cuda-9.1/bin:$PATH"
LD_LIBRARY_PATH="/usr/local/cuda-9.1/lib64:$LD_LIBRARY_PATH"
С .profile
как и выше, я могу открыть терминал и запустить echo $PATH
чтобы инструкция сработала, как PATH
теперь содержит папку, которую я указал. Однако по какой-то причине это не работает для LD_LIBRARY_PATH
,
Я догадался, что проблема могла быть в том, что LD_LIBRARY_PATH
раньше не существовало, поэтому я попытался изменить .profile
с немного другим кодом ниже в последних 2 строках.
PATH="/usr/local/cuda-9.1/bin:$PATH"
export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64
Опять же, однако, безуспешно.
Заметив первое предупреждение в начале .profile
Я проверил, был ли у меня ~/.bash_profile
или ~/.bash_login
файлы. Их не существует, и в любом случае они не объяснят, как мой PATH
успешно обновляется.
Проведя некоторое исследование, я наткнулся на этот другой ответ, который объясняет, что .profile
не обязательно выполняется, когда я открываю терминал. Однако, опять же, как я могу это объяснить PATH
обновляется?
В чем может быть проблема? Что-то не так с моим синтаксисом?
РЕДАКТИРОВАТЬ:
Я попытался выйти и снова после того, как изменил .profile
содержать
PATH="/usr/local/cuda-9.1/bin:$PATH"
export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64
и теперь это работает. Если я ввожу терминал и введите echo $LD_LIBRARY_PATH
Я наконец вижу это. Я до сих пор не понимаю, почему не работала первая версия моего списка инструкций...
2 ответа
Причина по которой PATH
работает без export
является то, что он установлен в качестве переменной среды до ~/.profile
это запустить. Чтобы изменить существующую переменную среды,
VAR=foo
достаточно.
Чтобы добавить переменную в среду, вам нужно сделать
export NEWVAR=bar
Пожалуйста, смотрите EnvironmentVariables для дальнейшего чтения по теме.
Я думаю, что ваше решение говорит само за себя, export
ключевое слово добилось цели и является обязательным для "экспорта" переменных среды для использования. Вы можете экспортировать переменные оболочки, используя команду export.
Чтобы увидеть список экспортированных переменных, запустите export -p
Увидеть man bash
:
export [-fn] [name[=word]] ...
export -p
The supplied names are marked for automatic export to the environment of subsequently executed commands. If the -f option is given, the names
refer to functions. If no names are given, or if the -p option is supplied, a list of names of all exported variables is printed. The -n
option causes the export property to be removed from each name. If a variable name is followed by =word, the value of the variable is set to
word. export returns an exit status of 0 unless an invalid option is encountered, one of the names is not a valid shell variable name, or -f is
supplied with a name that is not a function.