我希望设置不同的 Windows 终端启动配置,以便可以bash
在不同的窗口中使用 WSL,每个窗口都有不同的环境配置文件,该配置文件是从命令行配置的 - 而不是每次都添加新脚本。
设置一个WSL
很容易,我创建一个 Windows 终端配置文件,它使用我的标准.profile
命令运行 bash:
wsl -d Ubuntu-20.04
但是我的电脑有不同的 Linux JDK,我希望 Windows 终端启动器分别有“JDK18”、“JDK19”和“JDK20”,以便每个bash
JDK 使用不同的配置文件打开 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"
生成的bash
shell 会获取环境变量,并加载包含更改的配置文件。请注意,它有运行两次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"