Автозагрузка переменных в оболочке zsh/bash!
Как организовать переменные окружения, вынеся их из .zshrc в отдельные файлы. Практическое руководство по созданию директории ~/.env и функции для их автоматической загрузки в Linux.
Салют, $USER!
Эй, кстати, наш Telegram уже ждёт именно тебя. Забегай!
При добавлении новой переменной в ~/.zshrc поймал себя на мысли, что файл очень сильно разросся, много указано переменных, да ещё и комментариев к ним. Надо что-то с этим делать. Подумал и решил загружать переменные так же будет ~/.zshrc, но брать их будет из россыпи файлов в директории $HOME/.env. Сказано — сделано.
создаем директорию
1
mkdir $HOME/.env
пишем мини скрипт
На самом деле, мы напишем функцию в ~/.zshrc или ~/.bashrc и будем её вызывать при загрузке оболочки. В .zshrc или в .bashrc добавляем в конец файла.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
load_all_env() {
local env_dir="$HOME/.env"
if [ -d "$env_dir" ]; then
for env_file in "$env_dir"/*; do
if [ -f "$env_file" ] && [ -r "$env_file" ]; then
echo "Loading: $env_file"
set -a
source "$env_file"
set +a
fi
done
echo "All environment files loaded from $env_dir"
else
echo "Env directory not found: $env_dir"
fi
}
load_all_env # <- вызываем нашу функцию
тесты
- Выполним команду.
1
source ~/.zshrc
ну и смотрим вывод
1
2
Loading: /home/USERS/.env/nacker_env <- это файл в котором указанные переменные
All environment files loaded from /home/USERS/.en
Теперь мы можем указывать переменные в разных файлах, допустим:
- system - системные
- docker - подключение к удалённому Docker Ну и так далее.
PS
Мы и эту функцию вынесем из файла .bashrc в отдельный файл, а точнее, в библиотеку. Создадим файл, где удобно вам — у меня это будет в ~/.local/custom, и в этой директории файл bashrc_lib, и перенесём нашу функцию в него.
1
2
3
mkdir -p ~/.local/custom
vim ~/.local/custom/bashrc_lib
А в bashrc вставим следующее.
1
2
3
4
if [ -f ~/.local/custom/bashrc_lib ];
then
. ~/.local/custom/bashrc_lib
fi
