使用不同的环境变量从 Windows 终端启动 WSL

使用不同的环境变量从 Windows 终端启动 WSL

我希望设置不同的 Windows 终端启动配置,以便可以bash在不同的窗口中使用 WSL,每个窗口都有不同的环境配置文件,该配置文件是从命令行配置的 - 而不是每次都添加新脚本。

设置一个WSL很容易,我创建一个 Windows 终端配置文件,它使用我的标准.profile命令运行 bash:

wsl -d Ubuntu-20.04

但是我的电脑有不同的 Linux JDK,我希望 Windows 终端启动器分别有“JDK18”、“JDK19”和“JDK20”,以便每个bashJDK 使用不同的配置文件打开 WSL。

目前,我可以使用 Windows 终端配置文件通过命令实现上述操作bash.cmd NN,并且bash.cmd该脚本是:

@echo off
rem Runs bash with no PATH from Windows
set Path=

:: Optional arguments are JDKVER:
if x%1 NEQ "" (
   set JDKVER=%1
   set WSLENV=%WSLENV%::JDKVER
)
rem WSLENV is a list of env variables that are passed from Windows to WSL
C:\WINDOWS\system32\wsl

因为我.profile包含这些行,所以在结果中设置了正确的 JDK NN 环境变量bash

[[ -z $JDKVER ]] && export JDKVER=20
export JAVAHOME=/mnt/c/linux/jdk-$JDKVER

有没有办法定义 Windows 终端启动器以绕过我对 Windows 的使用CMD?使用可以为 Windows 终端中所需的每个配置文件使用不同的环境设置配置 WSL 启动的示例:

wsl -d Ubuntu-20.04 -envvar JDKVER=xxx

答案1

对此的评论类似问题让我找到了一种无需将 CMD 作为脚本或脚本运行即可设置 WSL/bash 环境变量的方法。这是 Windows 终端命令:

wsl -e bash --noprofile -c "export JDKVER=18 && exec bash --rcfile ~/.profile"

生成的bashshell 会获取环境变量,并加载包含更改的配置文件。请注意,它有运行两次JDKVER=18的副作用。bash

答案2

我认为您可以通过使用额外的 Windows 终端配置文件来实现这一点。

使用配置文件调用 Windows 终端 使用 :

WindowsTerminal.exe -p profile-name

该配置文件的命令行类似于:

cmd.exe /k "set JDKVER=foo&& set WSLENV=%WSLENV%::JDKVER&& wsl -d Ubuntu-20.04"

相关内容