WSL与Windows环境共享
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 跨文件系统常用参数
| options | describe |
|---|---|
| /C | 使用cmd.exe运行一个命令并终止,类似于 bash -c |
Reference
更多cmd.exe帮助参考 cmd_helps
WSL备份及windows Docker安装
WSL安装维护
WSL与Windows环境共享的更多相关文章
- WLS中Linux与Windows间的环境共享
Reference 更多cmd.exe帮助参考 (cmd_helps)[https://ss64.com/nt/cmd.html] (WSL备份,windows Docker安装)[https://w ...
- Windows环境下访问NFS(33篇Storage的文章)
Windows环境下访问NFS 使用Solaris时,如果想在两台Solaris之间共享数据,那么你想到的最省事.最方便的方法肯定是nfs.但是现在的学生们的桌面,估计99%以上都是Windows,W ...
- Nginx——在Windows环境下安装
下载 Nginx是开源软件,用户可以访问 http://nginx.org/ 网站获取源码包或Windows二进制文件下载.其中1.13.x版本为开发版本,1.12.0版本为稳定版本.开发版本分支会较 ...
- Windows环境下多线程编程原理与应用读书笔记(1)————基本概念
自从学了操作系统知识后,我就对多线程比较感兴趣,总想让自己写一些有关多线程的程序代码,但一直以来,发现自己都没怎么好好的去全面学习这方面的知识,仅仅是完成了操作系统课程上的小程序,对多线程的理解也不是 ...
- WSL与Windows交互实践
1. WSL是什么 2. WSL新特性 3. WSL管理配置 4. WSL交互 5. 解决方案 * 5.1 使用别名 * 5.2 多复制一份 * 5.3 重定向 * 5.4 symlink 6 ...
- Jenkins持续集成学习-Windows环境进行.Net开发2
目录 Jenkins持续集成学习-Windows环境进行.Net开发2 目录 前言 目标 使用 .Net Stardard 单元测试 流程 手动执行单元测试 自动执行单元测试 单元测试报告 上传Nug ...
- 在Windows环境中利用Responder工具窃取NTLMv2哈希
在Windows环境中利用Responder工具窃取NTLMv2哈希 翻译自:https://github.com/incredibleindishell/Windows-AD-environment ...
- VMware下的Linux系统中Windows的共享目录,不支持创建软连接
[问题] 在编译VMware下的Linux系统对从Windows中共享过来的文件,进行编译的时候,遇到: ln: creating symbolic link XXXXXX : Operation ...
- linux下如何挂接(mount)光盘镜像文件、移动硬盘、U盘、Windows网络共享和NFS网络共享
首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式: mount [-t vfstype] [-o options ...
随机推荐
- 180度\360度sg90舵机的使用及代码程序
大部资料都是在网上找到网友大神所共享的,在网上找了几种舵机的,刚接触有点懵,之后找得多了就理解了,想要控制一个硬件就要先了解这个硬件.这里有介绍180度舵机和360度舵机的具体使用,有网上大神的程序, ...
- c++中的赋值函数
在c++中,对于任意一个类Class A,如果程序员不显示的声明和定义上述函数,C++编译器将会自动的为A产生4个public inline 的默认函数,这4个函数最常见的形式为: A() //默认构 ...
- simulink中scope图像显示添加图例
1. 在scope中添加图例 (1)首先打开配置属性(configuration properties),在display下面的show legend前面打钩 这样就允许图例显示出来 (2)对scop ...
- 6_稳定性_李雅普诺夫_Lyapunov
李雅普诺夫方法参考
- 一次关于关系抽取(RE)综述调研的交流心得
本文来自于一次交流的的记录,{}内的为个人体会. 基本概念 实事知识:实体-关系-实体的三元组.比如, 知识图谱:大量实时知识组织在一起,可以构建成知识图谱. 关系抽取:由于文本中蕴含大量事实知识,需 ...
- 小记-用canvas完成图像液化(向前变形)过程
前几天由于团队需要,折腾了一下图像液化的处理过程. 现在来整理一下思路,做个记录. 用到公式如下,网上拿来的 话不多说,上代码 本来想尽量写出点逼格...后来发现怎么写也还是几个function搞定, ...
- 小程序web开发框架-weweb介绍
weweb是一个兼容小程序语法的前端框架,你可以用小程序的写法,来写web单面应用.如果你已经有小程序了,通过它你可以将你的小程序运行在浏览器中.在小程序大行其道的今天,它可以让你的小程序代码得到最大 ...
- Linux 0.11源码阅读笔记-块设备驱动程序
块设备驱动程序 块设备驱动程序负责实现对块设备数据的读写功能.内核代码统一使用缓冲块间接和块设备(如磁盘)交换数据,缓冲区数据通过块设备驱动程序和块设备交换数据. 块设备的管理 块设备表 内核通过一张 ...
- Array.fill()函数的用法
ES6,Array.fill()函数的用法 ES6为Array增加了fill()函数,使用制定的元素填充数组,其实就是用默认内容初始化数组. 该函数有三个参数. arr.fill(value, s ...
- video踩坑
查看以及修改video控件样式,原文地址:https://blog.csdn.net/z2181745/article/details/82531686 chrome浏览器,F12调出控制台左上角三点 ...