Процес успадковує середовище від батьківського процесу, який його запускає. Щоб змінити значення 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). PID 1855 був започаткований (якоюсь дитиною?) 1497 р., Який розпочався 1481 р., Ініційованим PID 1, розпочатим процесом предків 0.
Зробіть аналогічний слід успадкування для процесу, на який ви хочете вплинути, з’ясуйте, які файли ініціалізації є релевантними, і внесіть зміни до PATH десь у цьому дереві, ймовірно, із чимось схожим на:
PATH=${PATH}:/usr/local/bin
~/.pam_environment
рішення полягає в тому, що модуль pam_env за замовчуванням не читає його, якщо тільки розподіл не налаштовує його інше. У Fedora 20, наприклад, не читається.