WSL2 为所有用户创建环境变量

WSL2 为所有用户创建环境变量

我使用 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。

无论如何,以下是我根据所有答案和研究采取的步骤。

  1. 启用 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
  1. 将环境变量 FOO 放置在以下/etc/environment位置:
FOO="TRUE"
  1. 重新启动计算机以使更改生效

  2. 打开 ubuntu 并运行echo $FOO。这不会显示任何内容。如果我将用户切换到 tono(例如使用)su tono,然后运行相同的命令,它就会起作用。

  3. 我做了一些研究,并将行从改为on Defaults env_reset,这样变量就不会被重置。进行此更改并重新启动计算机仍然不起作用。Defaults !env_reset/etc/sudoers

  4. 我现在修改文件 /root/.bashrc 并在其中添加环境变量。这有效,但前提是我在终端内。如果我从命令提示符运行wsl echo $FOO它,则不起作用。

简而言之,我的目标是运行命令wsl echo $FOO并使其返回 true,就像wsl echo $USER可以工作一样。我是否必须将该变量的值存储在文件中,因为创建一个对所有用户都有效的环境变量非常复杂?

编辑

我将创建一个文件夹 /env,其中包含所有环境变量。这样我就可以运行

wsl echo "hello $(cat /env/FOO) world"

时间较长,但肯定会有效

答案1

好的,有两个问题。对于环境变量,您可以使用 WSLENV。

对于默认用户,我也是 wsl 新手,不知道如何帮助你。但我的建议是不要依赖 root。

以下是使用 WSLENV 的示例:

#!pwsh
> $env:FOO="asdf"
> $env:WSLENV="FOO"
> wsl echo `$FOO
asdf

在此示例中,我没有持久化环境。如果您想使其持久化,请使用setx.exe或谷歌搜索基于 GUI 的解决方案。

参考:WSLENV:https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/

答案2

我将所有环境变量/env/my-env-variables.sh放在

var1="true"
export var1

var2="false"
export var2

alias my_alias="echo hello-world"

# ...etc

现在在 ~/.bashrc 上我在末尾添加了一行:source /env/my-env-variables.sh以便它们在我使用 shell 时可以工作。

现在,每次我从 Windows 执行脚本时,我只需要记住包含这些变量:

wsl source /env/my-env-variables.sh ; echo $var1 

相关内容