我想在 Ubuntu 机器(10.04)上设置几个环境变量(在启动时),但我想通过脚本创建它们的值,就像:
export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
- 我想要这样做的原因是用于设置环境变量的命令需要很长时间才能执行(大约 10 秒),所以我只想在启动后执行一次。无论如何,目前我通过在启动时缓存命令的结果来解决这个问题,这样后续调用就会很快,因此根本不使用环境变量。
我尝试过设置/etc/environment
,但只能逐字复制 rhs
我尝试在启动时执行脚本/etc/init.d/
,但似乎不起作用。
有想法吗?
答案1
要设置启动时可用的系统范围的环境变量,请将它们放在 中/etc/environment
。此文件不是脚本文件,而是由每行一个赋值表达式组成。如下所示:
SYSTEM_FOO=barnone
笔记:变量扩展在 /etc/environment 中不起作用。
原文信息来自帮助中心
答案2
将其放入~/.bash_profile
或~/.bashrc
gedit ~/.bashrc
如果您需要在非交互式 shell(脚本)中使用这些变量,请使用 .bash_profile;如果您在 shell 中设置变量,请使用 ~/.bashrc。
如果这不起作用,我们需要更多详细信息,特别是您设置了哪些变量以及出于什么目的?
答案3
虽然这可能不是一个好的做法,但你可以将环境变量指定为内核参数。Linux 内核文档有一些很好的信息(重要段落以粗体显示):
参数列表
内核命令行被解析为由空格分隔的字符串列表(启动参数)。大多数启动参数的形式如下:
name[=value_1][,value_2]...[,value_10]
其中“name”是一个唯一关键字,用于标识要将相关值(如果有)赋予内核的哪个部分。请注意,10 的限制是真实的,因为当前代码每个关键字仅处理 10 个逗号分隔的参数。(但是,在异常复杂的情况下,您可以将同一个关键字与最多 10 个额外的参数重复使用,假设设置函数支持它。)
大部分排序都编码在内核源文件 init/main.c 中。首先,内核检查参数是否是特殊参数“root=”、“nfsroot=”、“nfsaddrs=”、“ro”、“rw”、“debug”或“init”中的任何一个。这些特殊参数的含义如下所述。
然后,它会遍历设置函数列表,查看指定的参数字符串(例如“foo”)是否已与特定设备或内核部分的设置函数(“foo_setup()”)相关联。如果您向内核传递了行 foo=3,4,5,6,则内核将搜索 bootsetups 数组以查看“foo”是否已注册。如果已注册,则它将调用与“foo”关联的设置函数(foo_setup()),并将内核命令行上给出的参数 3、4、5 和 6 传递给它。
任何不被接受为上述设置函数的形式为“foo=bar”的内容都会被解释为要设置的环境变量。
一个(无用的?)示例是使用“TERM=vt100”作为启动参数。任何未被内核拾取且未被解释为环境变量的剩余参数随后都会传递给 PID 1,通常是 init(1) 程序。传递给 init 进程的最常见参数是单词“single”,它指示它以单用户模式启动计算机,而不是启动所有常用守护进程。查看系统上安装的 init(1) 版本的手册页,查看它接受哪些参数。
这AskUbuntu 答案有一些关于如何修改内核启动参数的很好的说明。
答案4
将你的命令输入到/etc/rc.local
。确保阅读头部的注释。