linux export 创建环境变量无效

文章详细介绍了Linux中使用export指令创建环境变量的区别和限制,以及如何通过修改/etc/profile文件实现全局环境变量的设置。通过source命令可以使配置立即生效。文章还探讨了shell进程与环境的关系,并提供了一些实验以加深对环境变量理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

0 前言

自己在学习linux的时候遇到了这个问题,老师讲解说,使用export指令可以创捷一个环境变量,让其他的shell脚本访问到。但是自己去实验的时候,却根本访问不到,经过一段时间的研究,我根据自己浅薄的知识,对这种问题做出了一个解释,可能不正确,欢迎各位大佬指正

 

1 了解几个命令和配置文件

在解决这个问题之前,我们先来了解几个简单的指令

 

1.1 cat 命令

使用这个命令可以查看到当前shell环境中的环境变量

cat

# 直接输入即可

 

1.2 echo 指令

使用这个指令我们可以查看到当前的环境变量的值,可以辅助我们判断当前环境中是否存在这个环境变量(如果没有,那么就不会显示值)

echo $环境变量名

1.3 /etc/profile 配置文件

新的终端在启动的时候,会读取这个配置文件中配置的环境变量,将其加载到我们的shell环境中,

我们通过配置这个文件来给我们的环境添加环境变量

同时我们使用下面的指令

cat /etc/profile | grep export

可以看到我们配置的环境变量

 

1.4 source 指令

让配置文件中的配置,或则是shell脚本中的环境变量等,在当前shell环境中生效

 

#比如我们下面这行代码的含义就是,让hello.sh 中配置的环境变量在当前环境中生效
source hello.sh 

#这行代码的意思就是,让/etc/profile中的配置在当前的shell环境中生效
source /etc/profile

 

2 shell进程与环境

当我们打开一个终端的时候,linux就会创建一个交互式的shell进程,这个进程有它自己的一套环境(别名,环境变量等)

当我们去执行一个shell脚本的时候,这个进程就会创建一个子进程来执行这个shell脚本,同时这个子进程也会继承父进程的环境(本文中所说的当前环境,指的就是这个交互shell的环境)

 

3  解释问题

3.1 shell脚本配置环境变量

有了前面的知识,那么我们在来解释这个问题就很容易了。

现在假设我们有一个叫做 test.shell 的脚本,它里面的代码是这样写的

#!/bin/bash
export TEST=1

这行代码的作用是,将TEST这个环境变量配置到子进程的shell环境中,所以,我们在其他的shell进程中,是无法访问到这个环境变量的。

那怎样才能将这个环境变量配置到当前环境(也就是父进程的环境)呢?

这时候就要请出我们的source指令了


source test.sh

执行上述代码,我们就能将这个环境变量,配置到父进程的环境了,在当前这个终端(交互shell进程)下的所有子进程,也都可以访问到这个环境变量了(因为继承了父进程的环境),我们再写一个新的shell脚本,也能访问到这个环境变量了。

那么,假如我们再打开一个终端,在这个新的终端中,还能不能访问到这个环境变量呢?
答案当然是不能的,因为这个环境变量只存在于当前的父进程环境中,也就是仅局限于这个终端。
那么,怎么才能配置一个所有的终端都可以访问的环境变量呢?

 

3.2 通过/etc/profile配置环境变量

我们还通过配置/etc/profile这个配置文件来配置环境变量

#我们可以使用下述的格式来创捷新的环境变量

export JAVA_HOME=/opt/jdk/jdk1.8.0_202

系统在建立新的终端的时候,会读取这个文件,然后将其中的环境变量加入到自己的shell环境中

所以假如再我们在修改这个配置文件之后没有重启终端,我们就不能访问到我们新添加的环境变量了。

当然,我们也可以使用source指令

source /etc/profile

这个指令可以立即将我们修改的配置加入到当前环境中,这样我们就可以访问到了

 

3.3 两种方法的比较

通过上面的解释,我们可以得到下面的一些结论(可能有误,个人理解)

使用shell指令方式配置的环境变量,仅能在当前这个终端环境中使用,更换终端,再次登录,都无法再找到了(同时也不会写入/etc/profile这个配置文件中)

使用更改配置文件方式配置的环境变量,可以在其他的所有终端中使用到,是真正的全局配置

这两种方法,各有各的优势所在,功能强大,作用范围大的不一定更好,合适的才是最好的

 

3.4 一些实验

下面是一些有趣的实验,可以加深对环境变量的理解

1 使用shell命令方式添加环境变量,使用cat指令可以找到吗,在配置文件中呢

2 使用shell命令方式添加环境变量,然后切换用户,是否可以找得到,使用配置文件方式呢

3 使用shell命令方式添加环境变量,然后建立新的连接或者终端,是否可以找到到,使用配置文件方式呢

4 使用cat指令查到的环境变量的数目是不是比使用配置文件查到的数目多,为什么呢

 

欢迎大家在评论区留下对问题结果的讨论,和对我的指正

 

<think>好的,我需要帮用户了解如何配置Ollama的环境变量。首先,我得回忆一下Ollama的相关知识,尤其是环境变量设置的部分。根据用户提供的引用内容,有四个引用,分别提到了在macOS和Windows下的配置方法,以及如何修改数据路径和重启应用。 首先,我应该整理不同操作系统的步骤。用户可能使用不同的系统,所以需要分开说明。比如,引用[1]提到了macOS中使用launchctl命令设置环境变量,而引用[2]、[3]、[4]都是关于Windows的配置,包括系统变量的设置、路径修改和重启Ollama的步骤。 接下来,我需要确保步骤的准确性。比如,在Windows中,用户需要进入系统属性设置环境变量,变量名可能是OLLAMA_MODELS或者OLLAMA_HOST,对应的值则是自定义的路径或IP地址。引用[2]详细说明了如何通过图形界面设置,而引用[4]补充了如何重启Ollama进程。 还需要注意用户可能的需求,比如修改模型存储路径以避免占用C盘空间,这在引用[3]中提到。要强调设置环境变量后需要重启应用才能生效,这在引用[4]里也有说明。此外,网络监听设置OLLAMA_HOST为0.0.0.0可以让其他设备访问,这可能也是用户需要的。 然后,我需要将信息结构化,分步骤说明,让用户能逐步操作。例如,在Windows部分,分步骤说明如何进入环境变量设置界面,添加变量,以及重启进程。对于macOS,使用命令行设置,并提到需要终端权限。 还要注意常见的错误点,比如变量名是否正确,路径是否存在,以及是否需要管理员权限。引用中提到的路径示例,如D:\LLM\OllamaLLM\models,需要提醒用户替换为自己的实际路径。 最后,生成相关问题,帮助用户进一步了解环境变量的作用,如何验证是否生效,以及路径无效时的处理方法。这些问题需要基于配置过程中可能遇到的疑问来设计,确保覆盖用户可能的需求。</think>### 如何配置Ollama环境变量? Ollama环境变量主要用于自定义模型存储路径和网络监听配置,以下分系统说明操作步骤: --- #### **Windows系统配置** 1. **修改模型存储路径** - 右键点击“此电脑” → 选择“属性” → 点击“高级系统设置” → 进入“环境变量” - 在“系统变量”中点击“新建”,输入变量名和值: - **变量名**: `OLLAMA_MODELS` - **变量值**: 自定义路径(例如`D:\LLM\OllamaLLM\models`),确保目录已提前创建[^2][^3] 2. **修改网络监听地址** - 新建系统变量: - **变量名**: `OLLAMA_HOST` - **变量值**: `0.0.0.0`(允许其他设备访问服务)[^4] 3. **重启Ollama服务** - 打开任务管理器 → 结束所有`ollama.exe`或`Ollama app.exe`进程 → 重新启动Ollama应用[^4] --- #### **macOS/Linux系统配置** 1. **通过终端设置环境变量** ```bash # 修改模型存储路径 launchctl setenv OLLAMA_MODELS "/path/to/custom/models" # macOS[^1] export OLLAMA_MODELS="/path/to/custom/models" # Linux # 允许外部访问 launchctl setenv OLLAMA_HOST "0.0.0.0" # macOS[^1] export OLLAMA_HOST="0.0.0.0" # Linux ``` 2. **重启服务生效** ```bash sudo systemctl restart ollama # Linux系统 ``` --- #### **验证配置是否成功** 1. 打开终端输入`ollama list`,观察模型是否从新路径加载 2. 检查服务监听地址: ```bash netstat -an | grep 11434 # 确认端口绑定在0.0.0.0 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值