在Ubuntu中`setx`等价
Windows有一个名为setx
的powershell命令,用于在用户或系统环境中创建或修改环境变量。
Ubuntu是否有类似的命令,即不使用nano
或vi
,只需要一行来添加或更新系统范围的环境变量。
实施解决方案
一行添加/更新
grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment
您可以通过在命令行中将其声明为新的或重新声明它来完成此操作。 例如,如果要将~/testfolder
添加到路径变量中,只需将其输入当前终端(这只是一个示例):
PATH="$HOME/testfolder:$PATH"
这当然只会在您说终端会话打开时更改它。 注意这里的$
用法,你把它留作声明,但是如果要显示它,你需要添加$
来扩展它的内容。
如果你想声明它们更持久和通用你可以将它们添加到你的~/.bashrc
(仅适用于你)文件或/etc/bash.bashrc
(系统范围)中,例如,如果你想让它们只计算你或者为所有用户。 另一种选择是将它添加到你的.profile
文件中(仅适用于你自己),从你登录的那一刻开始它就可行。你可以用echo
做到这一点,例如,如果你确定这个变量没有设置或者你已经设置好了创建新的(只是一个例子):
echo "variable=value" >> /path/filename
但是,如果你想在你的用户目录之外编辑一个文件就是你想要编辑/etc/bash.bashrc
的情况,你需要使用sudo
,所以你不能简单地使用’here document’,因为这不起作用,然后使用如下所示的行:
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
( set -o posix ; set ) | less
或sh -c set
。 所有三个都给出了不同的输出量,使用( set -o posix ; set ) | less
( set -o posix ; set ) | less
回馈实际设定的大多数变量。
没有直接等价的setx /m
,但有办法完成setx /m
工作。
setx /m
将variable=value
放在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
。 非/ m(即每用户) setx
只是将variable=value
放在HKCU\Environment
。
你特意要求’系统范围’。 为此,您可以将变量值对添加到/etc/environment
或/etc/profile.d/
。 前者由pam评估,而后者由/bin/sh
评估。 因此,在/etc/profile.d/
,您将添加variable=value; export variable
variable=value; export variable
。 (bash还允许export variable=value
)。 对于/etc/environment
您将添加variable=value
。
每用户等价物是~/.pam_environment
和~/.profile
。
另请参阅: https : //help.ubuntu.com/community/EnvironmentVariables
您可以在命令行上导出环境变量,但它不会影响已启动进程中的有效环境,只会影响当前进程及其子进程。 因此在实践中,您通常需要在更改环境变量时重新登录。