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环境共享的更多相关文章

  1. WLS中Linux与Windows间的环境共享

    Reference 更多cmd.exe帮助参考 (cmd_helps)[https://ss64.com/nt/cmd.html] (WSL备份,windows Docker安装)[https://w ...

  2. Windows环境下访问NFS(33篇Storage的文章)

    Windows环境下访问NFS 使用Solaris时,如果想在两台Solaris之间共享数据,那么你想到的最省事.最方便的方法肯定是nfs.但是现在的学生们的桌面,估计99%以上都是Windows,W ...

  3. Nginx——在Windows环境下安装

    下载 Nginx是开源软件,用户可以访问 http://nginx.org/ 网站获取源码包或Windows二进制文件下载.其中1.13.x版本为开发版本,1.12.0版本为稳定版本.开发版本分支会较 ...

  4. Windows环境下多线程编程原理与应用读书笔记(1)————基本概念

    自从学了操作系统知识后,我就对多线程比较感兴趣,总想让自己写一些有关多线程的程序代码,但一直以来,发现自己都没怎么好好的去全面学习这方面的知识,仅仅是完成了操作系统课程上的小程序,对多线程的理解也不是 ...

  5. WSL与Windows交互实践

    1. WSL是什么 2. WSL新特性 3. WSL管理配置 4. WSL交互 5. 解决方案  * 5.1 使用别名  * 5.2 多复制一份  * 5.3 重定向  * 5.4 symlink 6 ...

  6. Jenkins持续集成学习-Windows环境进行.Net开发2

    目录 Jenkins持续集成学习-Windows环境进行.Net开发2 目录 前言 目标 使用 .Net Stardard 单元测试 流程 手动执行单元测试 自动执行单元测试 单元测试报告 上传Nug ...

  7. 在Windows环境中利用Responder工具窃取NTLMv2哈希

    在Windows环境中利用Responder工具窃取NTLMv2哈希 翻译自:https://github.com/incredibleindishell/Windows-AD-environment ...

  8. VMware下的Linux系统中Windows的共享目录,不支持创建软连接

    [问题]  在编译VMware下的Linux系统对从Windows中共享过来的文件,进行编译的时候,遇到:  ln: creating symbolic link XXXXXX : Operation ...

  9. linux下如何挂接(mount)光盘镜像文件、移动硬盘、U盘、Windows网络共享和NFS网络共享

    首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的.      命令格式:      mount [-t vfstype] [-o options ...

随机推荐

  1. 如果有大量的 key 需要设置同一时间过期,一般需要注意什么?

    如果大量的 key 过期时间设置的过于集中,到过期的那个时间点,redis 可能 会出现短暂的卡顿现象.一般需要在时间上加一个随机值,使得过期时间分散一 些.

  2. Thymeleaf集成Shiro,shiro权限使用el表达式

    如果是Thymeleaf集成Shiro的话, 如果使用Shiro在页面上权限字符串需使用thymeleaf的表达式的话, 如果权限字符串在实例级别的话, 可以使用这种方式进行权限字符串的动态实例控制 ...

  3. synchronized 和 ReentrantLock 的区别?

    synchronized 是和 if.else.for.while 一样的关键字,ReentrantLock 是类, 这是二者的本质区别.既然 ReentrantLock 是类,那么它就提供了比 sy ...

  4. 学习saltstack (一)

    salt介绍 Salt是一个基础平台管理工具 Salt是一个配置管理系统,能够维护预定义状态的远程节点 Salt是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据 salt的核心功能 是命令 ...

  5. ubuntu 安装 mysql mariadb

    本教程面向Ubuntu服务器,适用于Ubuntu的任何LTS版本,包括Ubuntu 14.04,Ubuntu 16.04,Ubuntu 18.04,甚至非LTS版本(如Ubuntu 17.10和其他基 ...

  6. C语言中的bool类型 stdbool.h

    C语言的C99标准中已经可以使用bool类型了,但有些小伙伴可能受制于编译器等原因还无法使用,我就从最新版的VS2019 中,找到了stdbool.h这个头文件的定义,其实就是一堆宏的定义,代码如下: ...

  7. jq点击改变元素样式、添加类,显示隐藏,图标旋转,再次点击还原;表格点击显示下拉详情

    点击前 点击后 <tr> <td class="right" data-id="{$vo.id}" id="{$vo.id}&quo ...

  8. background-clip 和 background-origin

    下面都是我自己的理解, 如果有不对的地方, 还请大家帮忙指出.下面是在 chrome 浏览器上测试的 background-clip 和 background-origin 先说说background ...

  9. Idea运行时Scala报错Exception in thread "main" java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

    一.情况描述 使用idea +scala+spark,运行程序代码如下: package cn.idcast.hello import org.apache.spark.rdd.RDD import ...

  10. JVM虚拟机类加载机制(一)

    类从被加载到虚拟机内存中开始,到卸载出内存截止,整个生命周期包括:加载.验证.准备.解析,初始化.使用.卸载七个阶段.其中验证.准备.解析三个部分统称为连接. 类初始化情况: 遇到new.getsta ...