全局设置环境变量而无需重新启动Ubuntu

2024-02-16

我知道可以通过添加条目来设置系统范围的环境变量

/etc/environment

or

/etc/profile

但这需要系统重新启动或 X 重新启动。

是否可以在 Ubuntu / Linux 中设置环境变量,以便在系统范围内立即可用,而无需重新启动操作系统或注销用户?


简单的答案是:you cannot一般来说这样做.

为什么没有通用的解决方案呢?

“为什么?”需要更详细的解释。在 Linux 中,环境是特定于进程的。每个进程环境都存储在专门为该进程分配的特殊内存区域中。

顺便说一句:要快速检查进程的环境,请查看/proc/<pid>/env(或尝试/proc/self/env当前正在运行的进程的环境,例如您的 shell)。

当一个(“父”)进程启动另一个(“子”)进程时(通过fork(2)),父环境的环境是copied为孩子创造环境。此后,这两个环境之间不再存在继承式关联,它们是完全独立的。因此,我们无法改变“全局”或“主”环境来实现您想要的目标。

为什么不简单地更改所有正在运行的进程的每个进程环境?环境的内存区域位于明确定义的位置(基本上就在为堆栈分配的内存之前),因此您无法轻松扩展它,而不破坏进程的其他关键内存区域。

特殊情况下可能的半解决方案

也就是说,我们可以想象几种特殊情况,在这些情况下您确实可以实现您想要的目标。

  • 最明显的是,如果您进行“大小中立”的更改,则可以想象修补所有进​​程的所有环境。例如,替换每个USER=foo环境变量(如果存在),以及USER=bar。我担心这是一个相当特殊的情况。

  • 如果您确实不需要更改所有流程的环境,而只需更改一类众所周知的流程的环境,则可能可以采用更具创意的方法。沃斯普鲁格的回答 https://stackoverflow.com/a/16462131/135724是仅使用 Bash 进程即可完成此操作的令人印象深刻的演示。

可能还有许多其他特殊情况,都有可能的解决方案。但如上所述:一般情况没有解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全局设置环境变量而无需重新启动Ubuntu 的相关文章

随机推荐

  • Selenium Python 改变 IP

    我正在使用 Selenium for Python 编写一个网络爬虫 抓取工具每小时会多次访问同一网站 因此我希望找到一种方法 每隔几次搜索就更改我的 IP 最好的策略是什么 我使用的是 Firefox 是否有任何我可以切换的预先编写的代码
  • Android Studio 中的 JavaCV 配置

    我知道有很多类似的问题 但由于 JavaCV 等库的开发 其中很多似乎已经过时了 我使用的代码来自在 Android 中使用图像和音频创建视频 https stackoverflow com questions 23775173 video
  • Chrome 说我的内容脚本不是 UTF-8

    收到错误Could not load file worker js for content script It isn t UTF 8 encoded gt file I chrome worker js chrome worker js
  • Springframework“需要重定向才能获得用户批准”

    我的 Spring Web 应用程序有问题 我想使用 web 应用程序访问 google 日历 api 因此我必须向 api 验证自己的身份并授予对日历的访问权限 但实际的问题是我收到了错误org springframework secur
  • 嵌套枚举的替代方案

    我正在尝试创建几个enums因此 这给出了语法Dropdown Category Subcategory 然而 我一直在读到这不是一个好主意 我的选择主要是因为我想不出任何其他方法来选择不同的enum值取决于类别的选择 然后子类别的选择取决
  • 对于给定的整数 a,找到总和为 a 的所有唯一的正整数组合

    不是家庭作业问题 我正在回答这些问题here http www careercup com question id 5653595164770304我遇到了这个问题 有人已经回答了 我已经尝试了很多方法来理解所使用的递归 但我无法理解它 有
  • Laravel Dusk:未知错误:调用函数结果缺少“值”

    我在使用 Laravel Dusk type 和 value 方法时遇到问题 我收到以下错误 php artisan dusk group activation Warning TTY mode is not supported on Wi
  • 相同的AVX指令集代码Intel Core与AMD Ryzen性能差距巨大

    我想使用AVX指令集来加速从8通道图像到8通道图像的卷积运算 我使用 3x3 卷积核 我的代码如下 const float kptr kernels const float bptr biases m256 out0 mm256 loadu
  • 在Python中下载之前获取文件的大小

    我正在从网络服务器下载整个目录 它工作正常 但我不知道如何在下载之前获取文件大小以比较它是否在服务器上更新 这可以像我从 FTP 服务器下载文件一样完成吗 import urllib import re url http www someu
  • tomcat webapps目录绝对路径?

    我将 tomcat 提取放在一个地方 而我的 webapps 目录可能在其他地方 那么如何获取我的Web应用程序的绝对路径呢 我的文件处理程序位于 webapps 内 我想找到我的 webapps 或应用程序目录的绝对路径 从 c 或 ho
  • GitHub 页面上的侧边栏

    我在 GitHub Pages 上托管了一个简单的网站 它是一个公共存储库 仅使用具有默认设置等的标准默认模板 它是直接从根目录发布的 本质上 按照官方 Github Pages 教程 一切都处于默认状态 我只想为我的目录显示一个侧边栏 注
  • 谷歌 API 服务帐户。即使使用域范围委派访问也只能看到服务帐户驱动器

    我目前使用的 Google 服务帐户已启用域范围委派 我点击了此链接https developers google com identity protocols oauth2 service account https developers
  • 在 Nginx 配置中使用代理传递之前传递代理 URL

    我需要传递一个代理 URL 来连接到 Nginx 中作为代理传递提到的其他 URL 示例 如果我必须通过 Linux 服务器连接到 google com 我必须将代理设置为 xyz org 80 然后才能连接到 google com 那么如
  • 在 Windows 上使用 FreeType 和 Qt5

    有谁知道是否可以使用 FreeType 构建 Qt5 作为 Windows 上的文本渲染器而不是本机渲染器 我尝试使用 qt freetype 编译 Qt5 但仍然得到错误的文本 我还需要做其他事情吗 在查看 DeadWarlock 提出的
  • 检查数据类字段是否有默认值的 Pythonic 方法

    我最近一直在使用 python 3 7 并正在寻找利用新数据类的方法 基本上我有一个方法可以迭代数据类字段并检查它们是否有默认值 from dataclasses import fields MISSING classmethod def
  • pm2 下的自定义日志记录

    我在我写入的节点应用程序中有一些有用的日志记录console log node server js gt gt var log nodeserver log 2 gt 1 但是 当在下面尝试相同的操作时pm2 pm2 start serve
  • python如何在赋值运算符之后赋值[重复]

    这个问题在这里已经有答案了 好吧 我确信这是一个非常愚蠢的问题 但是python如何给变量赋值呢 说有一个变量a并被赋值a 2 所以python为变量分配了一个内存位置并且a现在指向包含该值的内存位置2 现在 如果我分配一个变量b a变量b
  • 以编程方式编辑表单回复

    我有一个谷歌脚本 可以为转储到我的电子表格中的每个表单响应生成编辑网址 有没有办法以编程方式更改响应值 就像我实际打开 URL 并手动更改值一样 例如 假设某人提交了一份姓名字段为 Sam 的表单 我希望能够以编程方式编辑此响应 以便同一字
  • 设备锁定时在 Today 扩展中加载文件

    在我今天的设备解锁的扩展中 这行代码按预期工作 从图像路径返回数据 let imageData NSData contentsOfFile path 但是 当我的设备用密码锁定时 它返回零 当设备锁定时 有什么方法可以访问文件系统中的图像吗
  • 全局设置环境变量而无需重新启动Ubuntu

    我知道可以通过添加条目来设置系统范围的环境变量 etc environment or etc profile 但这需要系统重新启动或 X 重新启动 是否可以在 Ubuntu Linux 中设置环境变量 以便在系统范围内立即可用 而无需重新启