Процесс наследует среду от родительского процесса, который его запускает. Чтобы изменить переменную PATH или другие значения среды в дочернем элементе, мы можем установить переменную в значение в родительском элементе и экспортировать переменную, если мы находимся в оболочке, а затем запустить дочерний процесс. Дочерний также может прочитать один или несколько файлов инициализации, чтобы изменить свою среду при запуске.
Итак, есть еще два вопроса, чтобы получить ответ:
Что такое дерево наследования родитель / потомок, которое приводит к процессу, на который вы хотите повлиять PATH или изменение среды?
Какие файлы инициализации используются / считываются / получены из соответствующих процессов в этом дереве?
Вот часть вывода ps (1), чтобы показать, что я подразумеваю под деревом наследования:
# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf
UID PID PPID USER COMMAND
0 1 0 root /usr/lib/systemd/systemd
0 1481 1 root /usr/sbin/gdm-binary -nodaemon
0 1497 1481 root \_ /usr/libexec/gdm-simple-slave ...
0 1504 1497 root \_ /usr/bin/Xorg :0 ...
0 1855 1497 root \_ gdm-session-worker ...
Обратите внимание на графические последовательности \ _ и номера PIP / PPID (идентификатор процесса и родительский идентификатор). PID 1855 был запущен (какой-то ребенок?) 1497, который был запущен в 1481, который был запущен PID 1, который был запущен процессом-предком 0.
Выполните аналогичную трассировку наследования для процесса, на который вы хотите повлиять, выясните, какие файлы инициализации являются релевантными, и внесите изменения в PATH где-то в этом дереве, возможно, с помощью чего-то похожего на:
PATH=${PATH}:/usr/local/bin
~/.pam_environment
решением состоит в том, что по умолчанию модуль pam_env не читает его, если дистрибутив не настроит его иначе. На Fedora 20 это не читается например.