解决linux终端启动后不能自动加载环境变量配置(个人配置文件)详解

设备环境

WSL2

Ubuntu-20.04

本教程适配所有linux,不管你是虚拟机还是WSL或者其他的平台。

问题阐述

由于专业课的要求,需要在Linux中新建一个用户,然后转到这个用户来完成专业课的各种实践要求。有可能是我在新建用户后没有执行某个"特定"的配置,导致我遇到个人的环境变量配置不能自动加载的问题,其实我一步一步按照安装手册进行了相应操作。

我详细介绍一下我的问题:

可以看到我新建的用户为hadoop,但是明眼人一下就会发现,为什么换了一个用户,用户名的颜色就变了,一个绿色,非常醒目好看,而一个浅色,显得那么苍白。其实这也为后面埋下了伏笔。

我通过sudo vim ~/.bashrc来查看环境变量,如下:

可以看到关于java的环境变量我已配置,但是我在终端执行java -version后却弹出没有找到该命令的问题:

我使用source ~/.profile命令来刷新配置文件,可以看到用户名变为了绿色,并且java -version也能够成功使用,我以为我成功了。

如果你没有profile文件,就通过sudo vim ~/.profile新建一个,并把下列代码添加进去:

bash 复制代码
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
	. "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

可是当我退出linux系统重新登录后,用户名又变为白色,并且java -version也不能使用,人崩了,虽然可以继续执行source ~/.profile来重新加载配置文件,但是你想如果每次登录linux这个用户都要执行刷新命令,那该多鸡肋啊,而且这也不符合程序员的规范啊,是我我就受不了。

解决方法

编辑bash_profile文件,使得终端每次启动能够自动加载个人配置文件。

解释:.bash_profile 文件,这个文件只在登录shell启动时被读取。如果你想让终端启动时自动刷新个人配置文件,你需要在 .bash_profile 文件中添加一行命令来读取 .bashrc 文件。

执行sudo vim ~/.bash_profile命令(如果没有该文件,会自动创建),加入以下代码:

bash 复制代码
if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

这段代码的意思是,如果 .bashrc 文件存在,那么就执行 source ~/.bashrc 命令来读取它。

最后,你需要让修改后的 .bash_profile 文件立即生效。在终端中输入 source ~/.bash_profile 即可。

我们可以看到,用户名又变为了绿色,java -version命令也能够正常使用。

并且当你退出该终端,重新登录该用户,可以看到用户名一开始就是绿色,java -version命令也能够使用。Cheers!

至此linux终端启动后不能自动加载环境变量配置的问题已经完美解决,好了,我要去肝专业课的实验了🤣。

相关推荐
向日葵花籽儿5 分钟前
#运维 | 前端 # Linux http.server 实践:隐藏长文件名,简短路径 (http://IP:port/别名 ) 访问
linux·运维·前端
井云AI1 小时前
井云智能体封装小程序:独立部署多开版 | 自定义LOGO/域名,打造专属AI智能体平台
人工智能·后端·小程序·前端框架·coze智能体·智能体网站·智能体小程序
Warren981 小时前
Spring Boot 拦截器返回中文乱码的解决方案(附全局优化思路)
java·网络·spring boot·redis·后端·junit·lua
练习时长一年2 小时前
SpringMVC相关自动配置
java·spring boot·后端
Victor3562 小时前
Redis(21)Redis的发布/订阅(Pub/Sub)机制是如何实现的?
后端
Victor3562 小时前
Redis(20) Redis的管道(Pipeline)是如何工作的?
后端
一枚小小程序员哈5 小时前
基于asp.net 的在线餐饮订餐系统的设计与实现/基于c#的网上订餐系统/餐厅管理系统
后端·c#·asp.net
我一定会有钱8 小时前
Linux爆音问题解决方法(隔一会会有奇怪噪音)
linux·运维·服务器
Dobby_0510 小时前
【Ansible】变量与敏感数据管理:Vault加密与Facts采集详解
linux·运维·云原生·ansible
你的人类朋友10 小时前
【Node&Vue】什么是ECMAScript?
前端·javascript·后端