На жаль, не існує повністю портативного місця для встановлення змінних середовища. Два файли, які найближче наближаються ~/.profile, це традиційне місце розташування і працює нестандартно для багатьох установок, а ~/.pam_environmentтакож сучасна, звичайна, але обмежена альтернатива.
Що вкласти ~/.pam_environment
Файл ~/.pam_environmentчитається всіма методами входу, які використовують PAM та ввімкнено цей файл. Сьогодні це стосується більшості систем Linux.
Основною перевагою ~/.pam_environmentє те, що (при включенні) воно зчитується до запуску оболонки користувача, тому воно працює незалежно від типу сеансу, оболонки входу та інших складностей. Він навіть працює для неінтерактивних входів, таких як su -c somecommandі ssh somecommand.
Основне обмеження ~/.pam_environmentполягає в тому, що ви можете розміщувати там просто прості завдання, а не складний синтаксис оболонки. Синтаксис цього файлу такий.
- Файли аналізуються по рядках.
- Провідна пробіл ігнорується.
- Ви можете необов'язково починати рядки з
exportта пробілу (не вкладка, перехідна фігура).
- Після цього кожен рядок повинен мати форму,
VAR=VALUEде VAR складається з літер, цифр та підкреслень.
# починає коментар, він не може відображатися у значенні.
- Якщо VALUE починається з
'або "містить іншу ідентичну цитату, то VAR встановлюється на рядок між цитатами (все після другої лапки ігнорується). В іншому випадку VAR встановлюється на рядок після =знаку.
- Якщо немає
=, змінна видаляється з оточення.
Тож, перевернувшись, ~/.pam_environmentпрацює у великій кількості обставин. З іншого боку, ви не можете мати жодних динамічних налаштувань, таких як базувати значення змінної на іншій змінній (наприклад, додавання каталогу в PATH) або використовувати висновок команди (наприклад, перевірити наявність каталогу чи програми) та деякі символів ( #'", новий рядок) неможливо або клопітно ввести значення.
Що вкласти ~/.profile
Цей файл повинен мати синтаксис портативного (POSIX) sh. Використовуйте розширення ksh або bash (масиви [[ … ]]тощо), лише якщо ви знаєте, що ваша система має такі оболонки як /bin/sh.
Цей файл може читатися сценаріями в автоматизованих програмах, тому він не повинен викликати програми, які виробляють який-небудь вихід або виклик exec. Якщо ви хочете зробити це для входу в текстовий режим, робіть це лише для інтерактивних оболонок. Приклад:
case $- in *i*)
# Display a message if I have new mail
if mail -e; then echo 'You have new mail'; fi
# If zsh is available, and this looks like a text-mode login, run zsh
case "`ps $PPID` " in
*" login "*)
if type zsh >/dev/null 2>/dev/null; then exec zsh; fi;;
esac
esac
Це приклад використання /bin/shв якості оболонки для входу та переходу до улюбленої оболонки. Дивіться також, як я можу використовувати bash як оболонку входу, коли мій sysadmin відмовляється дозволити мені змінити його
Коли ~/.profileне читається неграфічний логін?
Різні оболонки для входу читають різні файли.
Якщо ваша оболонка для входу є невдалою
Bash читає ~/.bash_loginабо ~/.bash_profileякщо вони існують замість ~/.profile. Також bash не читає ~/.bashrcв оболонці входу, навіть якщо він інтерактивний. Щоб більше ніколи не запам'ятовувати ці примхи, створіть ~/.bash_profileнаступні два рядки:
. ~/.profile
case $- in *i*) . ~/.bashrc;; esac
Дивіться також Які файли налаштування слід використовувати для налаштування змінних середовища з bash?
Якщо оболонка для входу - zsh
Зш читає ~/.zprofileі ~/.zlogin, але ні ~/.profile. Zsh має інший синтаксис від sh, але може читати ~/.profileв режимі емуляції sh. Ви можете використовувати це для своїх ~/.zprofile:
emulate sh -c '. ~/.profile'
Дивіться також Zsh не потрапляє ~ / .profile
Якщо ваша оболонка для входу - це якась інша оболонка
Зробити там не так багато, окрім використання /bin/shв якості оболонки для входу, а улюблена оболонка (наприклад, риба) лише як інтерактивна оболонка. Ось що я роблю з zsh. Дивіться вище для прикладу виклику іншої оболонки з ~/.profile.
Віддалені команди
Якщо викликати віддалену команду, не проходячи інтерактивну оболонку, не всі оболонки читають файл запуску.
Ksh зчитує файл, вказаний ENVзмінною, якщо вам вдасться передати його.
Bash зчитує, ~/.bashrcякщо він не інтерактивний (!) І його батьківський процес називається rshdабо sshd. Таким чином , ви можете почати ~/.bashrcз
if [[ $- != *i* ]]; then
. ~/.profile
return
fi
Zsh завжди читає, ~/.zshenvколи воно починається. Використовуйте обережно, оскільки це читається кожним екземпляром zsh, навіть коли це піддіаграма, де ви встановили інші змінні. Якщо zsh - ваша оболонка для входу, і ви хочете використовувати її для встановлення змінних лише для віддалених команд, використовуйте захист: встановіть деяку змінну в ~/.profile, наприклад MY_ENVIRONMENT_HAS_BEEN_SET=yes, і перевірте цей захист перед читанням ~/.profile.
if [[ -z $MY_ENVIRONMENT_HAS_BEEN_SET ]]; then emulate sh -c '~/.profile'; fi
Справа графічних логінів
Багато дистрибутивів, диспетчери дисплеїв та настільних комп’ютерів організовують запуск ~/.profileабо шляхом явного джерела сценаріїв запуску, або за допомогою оболонки входу.
На жаль, не існує загального методу обробки комбінацій distro / DM / DE, де ~/.profileне читається.
Якщо ви використовуєте традиційний сеанс, розпочатий ним ~/.xsession, це місце, де ви повинні встановити змінні середовища; зробіть це за допомогою джерела ~/.profile(тобто . ~/.profile). Зауважте, що в деяких налаштуваннях сценарії запуску робочого середовища ~/.profileзнову будуть джерелами .