Пост

Автозагрузка переменных в оболочке zsh/bash!

Как организовать переменные окружения, вынеся их из .zshrc в отдельные файлы. Практическое руководство по созданию директории ~/.env и функции для их автоматической загрузки в Linux.

Автозагрузка переменных в оболочке zsh/bash!

Салют, $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
Авторский пост защищен лицензией CC BY 4.0 .

Популярные теги