我使用 Ubuntu 作为 WSL2 的首选 Linux 发行版。我想创建一个在所有用户中都存在的环境变量。
我已经尝试了很多答案,但没有一个有效。它们在虚拟机上工作,但不能在 WSL 下工作。例如,我已经尝试了这个问题的所有答案https://askubuntu.com/questions/161924/how-do-i-set-persistent-environment-variables-for-root。我的目标是从命令提示符运行wsl echo $FOO
,它就像工作一样wsl echo $USER
工作。.
wsl 默认用户也需要是 root。
无论如何,这里是我根据所有答案和研究所做的步骤。
- 启用 root 用户,每次我运行 ubuntu 时都以 root 用户身份启动它
# First enable root user on Ubuntu by running this on ubuntu wsl:
sudo passwd root
# enter password etc...
# Then set that user as the default user. On command prompt run:
Ubuntu config --default-user root
- 将环境变量 FOO 置于
/etc/environment
:
FOO="TRUE"
重新启动计算机以使更改生效
打开 ubuntu 并运行
echo $FOO
。这不显示任何内容。例如,如果我将用户切换到 tono,su tono
然后运行相同的命令,它就可以工作。我做了一些研究,我将线从
Defaults env_reset
改为Defaults !env_reset
on/etc/sudoers
,这样变量就不会被重置。进行此更改并重新启动计算机仍然不起作用。我现在修改文件 /root/.bashrc 并在其中添加环境变量。这有效,但前提是我在终端内。如果从命令提示符运行
wsl echo $FOO
它不起作用。
简而言之,我的目标是运行命令wsl echo $FOO
并让它返回 true,就像wsl echo $USER
会工作一样。我是否将不得不将该变量的值存储在文件中,只是因为创建一个对所有用户都持久的环境变量是多么复杂?
编辑
我将在其中创建一个包含所有环境变量的文件夹 /env。这样我就可以跑了
wsl echo "hello $(cat /env/FOO) world"
更长,但它肯定会起作用
好的,有两个问题。对于环境变量,您可以使用 WSLENV。
对于默认用户,我也是 wsl 的新手,不知道如何为您提供帮助。但我的建议是不要依赖root。
以下是使用 WSLENV 的示例:
在这个例子中,我不是持久化环境。如果您想让它持久化,请使用
setx.exe
或搜索基于 GUI 的解决方案。参考:WSLENV:https ://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/
我将所有环境变量都放在了
/env/my-env-variables.sh
as现在在 ~/.bashrc 上,我在末尾附加了一行:
source /env/my-env-variables.sh
以便它们在我使用 shell 时工作。现在每次我从 Windows 执行脚本时,我只需要记住将这些变量包括为: