使环境变量持久化
到目前为止,我们设置的环境变量仅在当前终端会话中有效。一旦你关闭终端或注销,这些变量就会丢失。在这一步中,你将学习如何使环境变量在不同会话中保持持久。
在配置文件中存储环境变量
有几个文件可以用来设置环境变量,使其持久化:
~/.bashrc 或 ~/.zshrc:用于特定用户的变量
/etc/environment:用于系统范围的变量
/etc/profile 或 /etc/profile.d/ 目录下的文件:用于登录时加载的系统范围变量
让我们在你的用户 shell 配置文件中添加一些环境变量。由于本实验环境使用 ZSH,我们将编辑 ~/.zshrc 文件:
nano ~/.zshrc
滚动到文件底部并添加以下行:
## Custom environment variables
export EDITOR="nano"
export CUSTOM_PATH="$HOME/bin"
export GREETING="Hello from .zshrc!"
保存文件(按 Ctrl+O,然后按 Enter)并退出 nano(按 Ctrl+X)。
要将这些更改应用到当前会话,你需要执行该文件:
source ~/.zshrc
现在,检查变量是否已设置:
echo $EDITOR
echo $CUSTOM_PATH
echo $GREETING
你应该会看到在 .zshrc 文件中设置的值。
现在,每次启动新的 shell 会话时,这些环境变量都将可用。
创建自定义环境变量文件
管理环境变量的一个好做法是为它们创建一个单独的文件,特别是对于特定项目的变量。这样可以更轻松地管理和共享配置。
让我们在你的项目目录中创建一个名为 .env 的文件:
cd ~/project
nano .env
添加以下内容:
## Project environment variables
export PROJECT_NAME="Linux Environment Lab"
export PROJECT_VERSION="1.0.0"
export DEBUG_MODE="true"
保存文件(按 Ctrl+O,然后按 Enter)并退出 nano(按 Ctrl+X)。
要将这些变量加载到当前会话中,执行该文件:
source ~/project/.env
现在检查变量是否已设置:
echo $PROJECT_NAME
echo $PROJECT_VERSION
echo $DEBUG_MODE
你应该会看到 .env 文件中的值。
创建加载环境变量的脚本
最后,让我们创建一个从文件中加载环境变量的脚本。这是开发环境中常见的做法:
cd ~/project
nano load_env.sh
添加以下内容:
#!/bin/bash
## Script to load environment variables from a .env file
ENV_FILE=".env"
if [[ -f "$ENV_FILE" ]]; then
echo "Loading environment variables from $ENV_FILE"
## Read each line from the .env file
while IFS= read -r line || [[ -n "$line" ]]; do
## Skip comments and empty lines
if [[ $line =~ ^## ]] || [[ -z $line ]]; then
continue
fi
## Export the variable if it starts with "export "
if [[ $line == export* ]]; then
## Remove the "export " prefix and export the variable
eval "${line}"
echo "Exported: ${line#export }"
fi
done < "$ENV_FILE"
echo "Environment variables loaded successfully"
else
echo "Error: $ENV_FILE file not found"
exit 1
fi
保存文件(按 Ctrl+O,然后按 Enter)并退出 nano(按 Ctrl+X)。
使脚本可执行:
chmod +x ~/project/load_env.sh
现在,取消设置我们之前设置的变量,然后运行脚本再次加载它们:
unset PROJECT_NAME PROJECT_VERSION DEBUG_MODE
echo "PROJECT_NAME: $PROJECT_NAME"
## Now load the variables using the script
~/project/load_env.sh
## Check if the variables are now set
echo "PROJECT_NAME: $PROJECT_NAME"
该脚本读取 .env 文件,并导出每个以 export 关键字定义的变量。
这种方法在开发环境中常用于管理特定项目的环境变量。