在Ubuntu中相当于`setx`


9

Windows有一个称为powershell的命令setx,该命令可在用户或系统环境中创建或修改环境变量。

Ubuntu是否有类似的命令,即不使用nanovi,仅一行来添加或更新系统范围的环境变量。

已实施的解决方案

一行添加/更新

grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment

Answers:


12

您只需在命令行中将其声明为new或重新声明它即可。例如,如果要添加~/testfolder到路径变量,只需在当前终端中输入它(这只是一个示例):

PATH="$HOME/testfolder:$PATH"

当然,这只会在您说终端会话打开的时间内更改它。注意$这里的用法,将其保留以进行声明,但是如果要显示它,则需要添加$以扩展其内容。

如果要声明它们的持久性和通用性,可以将它们添加到您的~/.bashrc文件中/etc/bash.bashrc(仅供您使用)或添加到(系统范围内),例如,如果您希望它们仅对您自己或对所有用户计数。另一种选择是将其添加到您的.profile文件中(仅供您自己使用),从您登录后就可以使用该文件echo。例如,如果您确定此变量尚未设置或创建新变量,则可以执行此操作(仅作为示例):

echo "variable=value" >> /path/filename

但是,如果要在用户目录外编辑文件(在这种情况下需要编辑)/etc/bash.bashrc,则需要使用它sudo,因此您不能简单地使用“此处文档”,因为这不起作用,而是使用下面的行:

echo "variable=value" | sudo tee -a /path/filename

如果变量已经存在,则可以使用sed命令进行更改(也仅是示例):

sed -i.bak 's/variable=value/variable=new-value/' /path/filename

这将编辑文件中的变量,但在编辑之前创建它的备份。如果您使用sed更改用户目录外的文件,则sudo在大多数情况下都需要使用,因此该行应为:

sudo sed -i.bak 's/variable=value/variable=new-value/' /path/filename

也可以从文件中删除变量sed,只需将正则表达式的第二部分留空即可:

sed -i.bak 's/variable=value//' /path/filename

如果您对设置了哪些环境变量感兴趣,可以使用env命令列出它们,( set -o posix ; set ) | less或者sh -c set。所有这三个都提供各种输出量,( set -o posix ; set ) | less并返回实际设置的最多变量。


1
与其说( set -o posix ; set )起来更简单,不如说是sh -c set。即使sh是符号链接也可以使用bash(在现代Ubuntu版本中通常不这样)。
Ruslan

@ruslan sh -c set并未真正显示系统上设置的所有环境变量。但是,我将把它作为显示其中一些内容的第三种方法。
Videonauth

实际sh -c set显示所有环境变量。它只是不显示 调用外壳程序的外壳程序变量,但是除非您使用export它们,否则从该外壳程序运行的进程绝不会继承这些变量。
Ruslan

是否有一个正当理由编辑/etc/environment?似乎这是混淆的捷径。
罗杰·利普斯科姆

@RogerLipscombe谢谢,不确定,仍然可以在其中编辑变量,但是为了不引起混淆,我将其删除。
Videonauth

11

没有与的直接等效setx /m,但是有一些方法可以完成此setx /m操作。

setx /m看跌期权variable=valueHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment。非/ m(即每个用户)setx只需将variable=valuein放入HKCU\Environment

您专门要求“系统范围”。为此,您可以将变量值对添加到或/etc/environment或上/etc/profile.d/<yourfile>。前者由pam评估,而后者由评估/bin/sh。因此,在中/etc/profile.d/<yourfile>,您将添加variable=value; export variable。(bash也允许export variable=value)。为/etc/environment您添加variable=value

每个用户的等效项是~/.pam_environment~/.profile

另请参阅:https : //help.ubuntu.com/community/EnvironmentVariables


7

您可以在命令行上导出环境变量,但它不会影响已经启动的进程中的有效环境,而只会影响当前进程及其子进程。因此,在实践中,更改环境变量时通常需要重新登录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.