WSL与windows的环境共享

2023-05-16

Reference
更多cmd.exe帮助参考 cmd_helps
WSL备份及windows Docker安装
WSL安装维护

在使用wsl时,总是需要执行windows的cmd,但是windows命令行对于大多数人使用起来还是不习惯,微软提供了在windows中Linux与Windows的命令互通,即可以使用cmd shell执行Linux命令,也可以使用bash shell来执行windows命令。

WSL可对 Windows 与 Linux 之间的集成操作:

  • 从 Linux shell(如 Ubuntu)运行 Windows 工具(任意 .exe)。
  • 从 Windows shell(即 PowerShell or cmd )运行 Linux 命令(如 cd ls grep)。
  • 在 WSL与windows之间共享环境变量。 (版本 17063+)

满足上述要求,可以很好地使用windows的软件在WSL中畅快的操作,即空WSL环境拥有了python解析器 docker等操作。

如何在 WSL和 Windows 之间共享环境变量

Build 17063 开始,可以利用 WSLENV 来增强 Win/WSL 之间的环境变量互操作。

什么是WSLENV

  • WSLENV 是一个以冒号分隔的环境变量列表,当从 WSL 启动 WSL进程或 Win进程时包含的变量
  • 每个变量都可以以斜杠作为后缀,后跟标识位以指定它的转换方式
  • WSLENV 可以在 WSL 和 Win32 之间转换的路径
  • WSLENV。在WSL中,是以冒号分隔的列表。在Win中,是以分号分隔的列表
  • 可以在.bashrc或者windows自定义环境变量中设置WSLENV

例如:一个WSLENV应该设置为

WSLENV=GOPATH/l:USERPROFILE/w:SOMEVAR/wp

在17063之前,WSL访问Windows环境变量唯一方法是使用全路径(可以使用全路径从WSL下启动Win32可执行文件)。但是没有办法在WSL中设置环境变量,调用Win进程,并期望将该变量传送到进程。

在17063之后,引入一个名为WSLENV的特殊环境变量,以帮助WSL和Win之间的共享。 WSLENV存在于两个环境中。用户可以将WSLENV的值设置为耦合值与环境变量串联,每个都以 \ 为标志,以指定应该如何解析该变量。例如:

/p

/p 表示应在WSL和Win32之间转换path。例如。在WSL中设置变量,将其添加到WSLENV设置/p 标志,然后在win环境cmd.exe中读取变量,该值会随着rootfs的转变而转换为对应的值。

root@stranger:/mnt/d# export TRANSLATABLE=`pwd`
root@stranger:/mnt/d# echo $TRANSLATABLE
/mnt/d
root@stranger:/mnt/d# export WSLENV=TRANSLATABLE\p
root@stranger:/mnt/d# export WSLENV=TRANSLATABLE/p
root@stranger:/mnt/d# echo $WSLENV
TRANSLATABLE/p
root@stranger:/mnt/d# cmd.exe
Microsoft Windows [版本 10.0.19043.1052]
(c) Microsoft Corporation。保留所有权利。

D:\>set TRANSLATABLE # 在windows中查看环境变量
TRANSLATABLE=D:\

/l

/l 表示该值是路径列表(如Linux的PATH)。在Linux中,是以冒号分隔的路径列表。在Win中,是以分号分隔的路径列表。/l 可以将路径列表适当对不通系统进行转换。

root@stranger:/mnt/d# export TEMPORARY=/usr/local/go/bin:/usr/local/python/bin

root@stranger:/mnt/d# WSLENV=$WSLENV:TEMPORARY/l

root@stranger:/mnt/d# echo $WSLENV
TRANSLATABLE/p:TEMPORARY/l

root@stranger:/mnt/d# cmd.exe
Microsoft Windows [版本 10.0.19043.1052]
(c) Microsoft Corporation。保留所有权利。

D:\>set TEMPORARY
TEMPORARY=\\wsl$\ubuntu1\usr\local\go\bin;\\wsl$\ubuntu1\usr\local\python\bin

/u

/u 表示仅在Linux(WSL)中调用变量的值为 Win 类型的变量值,及windows向Linux传递环境变量,但格式不变

D:\compose>set zhangsan=D:\compose

D:\compose>set zhangsan
zhangsan=D:\compose

D:\compose>set WSLENV=zhangsan/u

D:\compose>wsl -d ubuntu1
root@stranger:/mnt/d/compose# echo $zhangsan
D:\compose

如需要自动适应转换,则需要 使用/up

/w

/w 表示仅在从Win调用WSL环境变量是的值,该参数并不会自动转换,如需转换一样需要使用 /wp

root@stranger:/mnt/d/compose# export FROMWSL=/mnt/d/compose
root@stranger:/mnt/d/compose# export WSLENV=FROMWSL/w
root@stranger:/mnt/d/compose# cmd.exe
Microsoft Windows [版本 10.0.19043.1052]
(c) Microsoft Corporation。保留所有权利。

D:\compose>set FROMWSL
FROMWSL=/mnt/d/compose

D:\compose>exit
root@stranger:/mnt/d/compose# export WSLENV=FROMWSL/wp
root@stranger:/mnt/d/compose# cmd.exe
Microsoft Windows [版本 10.0.19043.1052]
(c) Microsoft Corporation。保留所有权利。

D:\compose>set FROMWSL
FROMWSL=D:\compose

使用脚本传递变量

如果需要BASH脚本传递对应的变量到windows程序执行,例如

#!/bin/bash

export MYPATH=/mnt/c/Users/

WSLENV=$WSLENV:MYPATH/p cmd.exe /c set MYPATH

通过WSL shell环境执行,可以得到windows程序处理的结果,并且可以拿到环境变量

root@stranger:/mnt/d/compose# bash 1.sh
MYPATH=C:\Users\

实例:设置一个开发环境,使其共享环境变量

例如,希望在WSL中设置DEV环境。使用WSLENV VAR,将其配置为在WSL和Win之间共享GoPath。

安装golang

首先,我们需要安装两个平台。要在Windows与WSL安装,步骤不说了。(如果是python等解析语言,可以使用alias直接使用windows的解析器则不需要安装了)

设置项目

接下来,需要配置的GO项目。该项目需要在Windows文件系统下。在PowerShell中发出以下命令:(这里在桌面配置的)

mkdir $env:USERPROFILE\desktop\goProject
cd $env:USERPROFILE\desktop\goProject
New-Item hello.go

配置环境变量,然后将gopath添加到WSLENV,此时,两个文件系统间,会使用同一个GOPATH

setx GOPATH "$env:USERPROFILE\desktop\goProject"
setx WSLENV "$env:WSLENV:GOPATH"/p

需要事项

  • WSL(通过.profile或其他)中的定义将在通过WSL访问时覆盖默认WSLENV中定义的值。
  • 在关闭WSL后,WSLENV不会持久化,需要修改相应的配置文件(.profile,.bash_rc等)。
  • WSL可以设置任何值。如果仅设置当前文件系统变量,则不会自动转换。通过WSLENV可以自动翻译成两种不通的文件系统下的环境变量。

题外话cmd.exe 跨文件系统常用参数

optionsdescribe
/C使用cmd.exe运行一个命令并终止,类似于 bash -c

Reference
更多cmd.exe帮助参考 cmd_helps
WSL备份及windows Docker安装
WSL安装维护

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WSL与windows的环境共享 的相关文章

  • UBUNTU下QT开发应用程序常见错误及其解决办法

    错误 xff1a helloworld直接报错 1 error cannot find lGL 原因 xff1a 缺少GL库 解决办法 xff1a sudo apt get install libgl1 mesa dev 我下载 了最新的q
  • 1488:新的开始

    题目描述 发展采矿业当然首先得有矿井 xff0c 小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井 xff0c 但他似乎忘记考虑的矿井供电问题 为了保证电力的供应 xff0c 小 FF 想到了两种办法 xff1a 在这一
  • 解决:使用 Vue 3 Script Setup 时 ESLint 报错 ‘defineProps‘ is not defined

    解决 xff1a 使用 Vue 3 Script Setup 时 ESLint 报错 defineProps is not defined Vue 3 的 Script Setup 语法引入了 defineProps defineEmits
  • Wek6 A - Tree diameter

    问题描述 xff1a 实验室里原先有一台电脑 编号为1 xff0c 最近氪金带师咕咕东又为实验室购置了N 1台电脑 xff0c 编号为2到N 每台电脑都用网线连接到一台先前安装的电脑上 但是咕咕东担心网速太慢 xff0c 他希望知道第i台电
  • CSCSWek12 B-Happy 消消乐

    题目描述 Q老师是个很老实的老师 xff0c 最近在积极准备考研 Q老师平时只喜欢用Linux系统 xff0c 所以Q老师的电脑上没什么娱乐的游戏 xff0c 所以Q老师平时除了玩Linux上的赛车游戏SuperTuxKart之外 xff0
  • ubuntu中各个文件夹的作用

    Ubuntu的根目录的文件夹各个含义 home xff1a 家目录 xff0c 所有普通用户都有一个以自己名字命名的文件夹存放在这个目录中 普通用户登录ubuntu默认进入的就是家目录中自己的文件夹 xff0c 可用pwd命令查看 xff0
  • 【CUDA】Ubuntu系统如何安装CUDA保姆级教程(2022年最新)

    本期目录 Linux安装CUDA Linux安装CUDA 输入以下命令 xff0c 查看 GPU 支持的最高 CUDA 版本 笔者这里显示的是 11 6 xff0c 这意味着 xff0c 安装的 CUDA 版本必须 lt 61 11 6 n
  • AVI视频格式分析-封装格式

    AVI视频封装格式分析 使用的工具RIFF块CHUNK块LIST块hdrl LISTavih CHUNKstrl LISTstrh CHUNKstrf CHUNK JUNK CHUNKmovi LISTidx1 CHUNK 使用的工具 el
  • 2014.10.10

    1 主要是制作了suse镜像 xff0c 但是还存在很多问题 xff0c 没有加上默认网关 xff0c 我很不开心 xff0c 根目录没有扩展 2 了解了下 boot from image 通过glance上传一个镜像 xff0c 然后通过
  • 2014.10.11

    我只想骂csdn xff01 截图直接粘过来居然不能直接显示出来 xff01 xff01 xff01 妈蛋 xff01 xff01 1 suse镜像制作完善 xff0c 根目录未扩展这是个大问题 xff0c 默认网关没加上 所谓的根目录扩展
  • 2014.10.12

    早晨8点就起了 xff0c 然后匆匆奔向wx xff0c 为了思念的人 xff0c 吃了个中午饭 xff0c 感觉还不错 xff0c 下午回来之后又去了wpj xff0c 胡扯一通 xff0c 而且发现现在家里人的注意力完全放在我的情感生活
  • vmware 下安装 red hat 9,dos 以及wmware tools

    1 安装vmware vmware 版本 7 11 282343 英文原版下载 xff1a http dl sh ctc 2 pchome net 03 lt VMware workstation full 7 1 1 282343 rar
  • 关于上财陈畅的俄罗斯方块的学习

    最近同学学习C xff0c 想做一个大练习 xff0c 于是选择了俄罗斯方块 xff0c 我 xff0c 计算机专业在校学生 xff0c 说实话理论还行 xff0c 实践动手能力很差 xff0c 同学让我先做 xff0c 然后给他讲讲怎样一
  • xrdp开源项目的代码分析

    最近我的博客将重新恢复更新 xff0c 从2012年3月份起 xff0c 我开始参与某公司的堡垒机项目的研发工作 xff0c 堡垒机又叫内控堡垒机 xff0c 运维审计系统 xff0c 相信不少人也听说过 xff0c 目前电信 xff0c
  • xrdp开源项目的代码分析-1

    首先要说明情况 xff0c 我分析的代码基于xrdp 2012 5 11日 xff0c 而不是最新的代码 xff0c 最新的代码稍有改动 xff0c 但是主体的思想没有变化 xrdp 2012 5 11日代码的下载地址 xff1a http
  • 穿山甲的投放小技巧(账户如何快速过冷启动期)

    1 300 xff08 出价 xff1a 目标成本的2 3倍出价 xff09 xff0c 看成本 2 600 xff08 出价 xff1a 300预算时的一半 xff09 xff0c 看成本 3 放到日满格预算 xff08 出价 xff1a
  • C++加入库dll

    加入头文件加入 include 34 MES inc MES2Interface h 34 pragma comment lib 34 MES lib MES2Interface lib 34 MES2Interface dll 复制到运行
  • 结构体的大小如何计算

    我们实际生活中 xff0c 保存的数据一般不会是同一种类型 xff0c 所以引入了结构体 而结构体的大小也不是成员类型大小的简单相加 需要考虑到系统在存储结构体变量时的地址对齐问题 由于存储变量地址对齐的问题 xff0c 结构体大小计算必须
  • flatpak安装的firefox视频播放卡顿的解决方案

    最近在debian系统中使用flatpak安装最新版的firefox后发现 xff0c firefox在播放视频时十分卡顿 xff0c 经过四处搜索 xff0c 终于找到了解决方案 How to use hardware accelerat
  • NodeBB 安装部署 Linux(阿里云 CentOS 6.3 Redis NodeJS)

    网上有很多 xff0c 写的都不完整 xff0c 我尽量给大家一个完整的 基于Linux 阿里云 CentOS 6 3 安装 NodeBB 论坛 1 先安装NodeJs 安装方式有多种 xff0c 有通过下载源代码编译的 xff0c 有下载

随机推荐