Weekly Journal 61 - WSL

WSL Environment Variables

I stumbled over an interesting little trick for using environment variables in both Powershell and WSL sessions. Windows has a special environment variable named WSLENV that is the source of the magic. You set WSLENV to a list of environment variable names separated by colons, and it will then take the values from Powershell and export them into a WSL session when it starts up. (It also works from WSL to Windows programs too)

For example, you can set the AWS CLI environment variables in Powershell, and have the same variables and values available in a WSL session. There are some special macros that help with defining file and directory paths to ensure they get formatted correctly for Windows or Linux.

Microsoft Dev Blogs has the best explanation that I’ve found so far, but I found the instructions to be a bit confusing. I couldn’t get the setx commands in their example to work properly, but I was able to make it work by modifying the value of $env:WSLENV in Powershell. Using my AWS example above, I set WSLENV to the following:

1
>$env.WSLENV = "$env.WSLENV:AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY:AWS_REGION"

As long as those variables are defined in Powershell, they will be available in the next WSL session that I start. To make the value permanent, add your custom WSLENV statement to your Powershell profile.