在 win 下,像 .profile , .bashrc 这样设置环境变量的机制是怎样的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
charlie21
V2EX    Windows

在 win 下,像 .profile , .bashrc 这样设置环境变量的机制是怎样的?

  •  
  •   charlie21 2019-12-14 23:01:49 +08:00 via Android 5017 次点击
    这是一个创建于 2178 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. path 的叠加顺序是怎样的,path 变量如何查看
    2. 能否快速更改 path ( 把某一个目录加入到 path 里,仅对当前 shell session 有效 ) 类似 "export PATH=/xxx:PATH" 。
    3. path 不过就是一个环境变量,像 Linux 的 path 设置是基于一个用户打开终端之后的一个 shell session。那么 win 下有没有真正的 shell (意会,打开终端得到一个只对于此 shell 生效的变量 ) ?

    简言之,win 下设置 path 等环境变量 ( per "shell" session, for a user ) 的常规操作是什么?

    -
    17 条回复    2021-08-02 12:51:26 +08:00
    charlie21
        1
    charlie21  
    OP
       2019-12-15 14:55:27 +08:00
    别告诉我我是 linux 遗毒太深阿
    charlie21
        2
    charlie21  
    OP
       2019-12-15 14:58:27 +08:00
    win 上用不着这个还是怎样 ... 如何配置 win 新系统作为一个开发机,环境变量什么的是最基本的吧
    charlie21
        3
    charlie21  
    OP
       2019-12-15 15:03:29 +08:00   1
    环境变量都配置不清楚怎么好意思说这个是开发机呢? 环境变量 污染,各种图省事就是让环境变量被污染,这是在 linux 下的血泪教训 ( 最后会折腾到 SDK 版本切换、虚拟环境,才罢休 )
    charlie21
        4
    charlie21  
    OP
       2019-12-15 15:06:01 +08:00
    像这种玩意,有没有利索一点儿的办法
    https://www.javatt.com/p/54073
    jin7
        5
    jin7  
       2019-12-15 15:13:16 +08:00
    @charlie21 #4 不用这么复杂呀. scoop 默认都给你配好了, java_home 和 path, 这两个就够了. scoop reset jdk11/jdk8 切换 jdk 版本.(具体看你用 scoop 安装的 jdk 的名称)
    path 在前面的更优先, 不是后面覆盖前面.
    jin7
        7
    jin7  
       2019-12-15 22:51:05 +08:00
    感觉很简单的事情 为啥还要找一套理论来安慰自己
    jin7
        8
    jin7  
       2019-12-15 22:53:06 +08:00
    上条瞎回复的.

    每个人都有自己的使用习惯.
    charlie21
        9
    charlie21  
    OP
       2019-12-19 19:02:15 +08:00
    从 MSDos 开始看 ... 对于 Windows 系统的 IT 自动化,脚本

    Command shell ( 即 Command Prompt ; 4DOS 是 MSDos shell 的竞争品 ) -> powershell
    https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands

    Cygwin -> Git Bash
    https://hackaday.com/2019/06/10/windows-10-goes-to-shell/ (基本只能编译 C++ 这些需要编译链的东西,是一个 编译用的 toolkit )
    https://stackoverflow.com/questions/42888024/git-bash-mintty-is-extremely-slow-on-windows-10-os 玄学

    WSL bash
    https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 # 貌似问题多多 还不成熟(可以从本地电脑配置的角度 使用。如果从软件项目的角度 (比如开发 ruby on rails 并 托管到 Linux 服务器) 希望得到完整的 Linux 支持 (而不需要访问 win 硬盘),建议使用 vagrant 或 docker 并把需要的目录作为卷 挂在进去 即可 )
    https://docs.microsoft.com/zh-cn/windows/wsl/faq#what-is-windows-subsystem-for-linux-wsl
    速度问题,中间层带来的速度问题 ( git status 的速度在无中间层的时候 反而比较快)
    中间层带来的速度问题是很容易理解的:在 dev 的角度 对项目而言 在 win 使用 npm 必然会快于 在 wsl 里使用 npm,在 sysadmin 的角度 对系统维护而言 在 wsl 里 使用 Linux 工具链 必然会 好于 在 Git Bash 里 使用 Linux 工具链 ( 所以 wsl 更像是一个 win 系统管理员 的工具,而不是 一个开发人员的工具。然而 win 系统管理员 已经有 Command Prompt 和 powershell 了啊 )
    https://stackoverflow.com/questions/50231989/running-git-commands-on-debian-ubuntu-on-wsl-is-really-slow-for-large-projects # 中间层的存在,有利于 低 IO 操作

    速度问题 https://news.ycombinator.com/item?id=18783525
    速度问题 https://github.com/microsoft/WSL/issues/4197
    速度问题 https://github.com/microsoft/WSL/issues/4387

    (还涉及了 当 虚拟机和宿主机不隔离时 会发生的普遍问题,比如 win 作为宿主机可能会去透过中间层去扫描 “虚拟机” 里面的新文件,在 wsl 使用 npm 的时候很明显,因为 所有的 wsl 系统的文件,都是对 win 可见的,它并没有一个自己独立的 不受 win 干扰的文件系统 as 虚拟机和宿主机隔离)
    https://github.com/Microsoft/WSL/issues/1932#issuecomment-407855346 # 扫描
    https://devblogs.microsoft.com/commandline/whats-new-for-wsl-in-windows-10-version-1903/
    https://superuser.com/questions/1110974/how-to-access-linux-ubuntu-files-from-windows-10-wsl # 实际上 按照 “虚拟机和宿主机分离” 的原则,在操作一个虚拟机的时候 大量违反此原则的操作 这是很危险的 (会对宿主机造成拖慢)

    对于 虚拟机和宿主机的问题,应该把虚拟机和宿主机隔离。如果做不到隔离:如果 IO 操作很小,那么影响不明显;如果 IO 操作很大,那么 在 wsl 里因为某一个项目需要 处理上万个文件 等于你在宿主机 win 上处理上万个文件,这对宿主机的影响是很大的。(这是 还不如在 vagrant 里开一个虚拟机专门来做,然后 把 它压缩为 zip 再拷贝出来 通过 共享文件夹 给到宿主机 )(更不用提这样的性能对比了:在 win 使用 npm 必然会快于 在 wsl 里使用 npm )

    讨论
    https://hashnode.com/post/windows-command-prompt-vs-powershell-vs-git-bash-cjhd5va7t0042mls2w3mnzkax

    再次说明
    大 IO 操作,最好不要透过中间层,这是常识 ... 上万个小文件 烦死你 ...

    无中间层:
    windows 原生
    linux 原生( vagrant )

    有中间层(性能必然极低):
    wsl。所以 如果追求性能(或不想受到中间层的 拖累),那么 尽量避免中间层。常识。仅仅在少量使用的时候用一用就 OK 了 --- 否则你会感受到虚拟机是怎么侵蚀宿主机的

    最后,我的感想是,正如这里说的,wsl 很好,中间层技术很好,但它有它擅长的东西 也有它不擅长的东西,它不擅长的东西就是 涉及到大量文件扫描的命令行操作,比如 git, npm。这时,应该摒弃中间层,使用原生操作 (无论是 win 原生 or Linux 原生)
    git 操作的速度 在大量文件的 repo 时:
    vagrant Linux git 优于 win Git Bash ( Cygwin ) 优于 wsl,因为 后者是利用了中间层技术
    http://news.ycombinator.com/item?id=18783525

    -
    charlie21
        10
    charlie21  
    OP
       2019-12-19 19:05:58 +08:00
    这个时候,Git Bash 是不可替代的。vagrant 是 比 wsl 在 IO 方面有优势的,wsl 仅仅胜出在 “虚拟机和宿主机不分离” 的方便性 ( 什么时候需要用到这个 ... ? )
    charlie21
        11
    charlie21  
    OP
       2019-12-26 22:21:27 +08:00
    Windows Defender 拖慢速度
    It makes file operations on regular Windows also extremely slow. For example unpacking the Go 1.11 zip which is 8700 files takes a second with my PCIe SSD with Windows Defender disabled. Enable it and the extraction time rises to several minutes.
    https://news.ycombinator.com/item?id=18783525

    better prevents the executable itself from being scanned by real-time
    https://github.com/Microsoft/WSL/issues/1932#issuecomment-407855346
    -
    FrankHB
        12
    FrankHB  
       2019-12-28 13:55:16 +08:00
    环境变量?看着还就是 UNIX 遗毒。当年折腾系统的不要搞什么半吊子鸡脖 IPC 什么 shell 哪来这么坨破事……
    日用要注意的无非是 export 改成 set,$IFS 钦定成分号,$xxx 变成%XXX%,不区分大小写,外加斜杠盘符 cmd 命令行长度限制 8191 之类的破烂。(当然你要倒腾 cygpath 混用什么的另说。)
    实现上另外一个差别主要是存在注册表里,刷新起来那个呵呵……
    %USERPROFILE%嘛,cmd 没这么幺蛾子。当然你非得用 bash 一样也有类似的,不过我都自己先整好%HOME%了。当然有的不认识$HOME 就很烦,常用的配置都 junction 链过去了……
    FrankHB
        13
    FrankHB  
       2019-12-28 13:58:20 +08:00
    你折腾全套开发环境那还折腾什么 Git Bash,上 MSYS2 pacman.conf 里加[git-for-windows]的源直接搞就是了。
    c941968215
        14
    c941968215  
       2019-12-28 14:30:45 +08:00
    @FrankHB
    > 当年折腾系统的不要搞什么半吊子鸡脖 IPC 什么 shell 哪来这么坨破事……

    有相关科普吗? ipc,shell,environment variable 的关系
    charlie21
        15
    charlie21  
    OP
       2019-12-28 20:54:42 +08:00
    几个帖子
    15 年 win 党使用 MacBook Pro 16 一个月感受 t/632238
    xshell 用腻了,微软的又没出,有没有过度的工具? t/565879?p=1
    git bash 折腾 :为 win10 打造 Linux 终端(非 wsl ) https://juejin.im/post/5bd5a08cf265da0add520772 https://github.com/xnng/my-git-bash
    cmder with Git for Windows : https://cmder.net
    FrankHB
        16
    FrankHB  
       2019-12-30 11:58:09 +08:00
    @c941968215 没有。
    但有一些相关经问题小结。
    https://github.com/FrankHB/pl-docs/blob/master/zh-CN/about-operating-systems.md
    环境变量冗余的问题其实不难理解:如果不需要依赖现在这样形式的 IPC,而和进程内引用变量一样使用,为什么还用得着强调所谓的环境变量?
    charlie21
        17
    charlie21  
    OP
       2021-08-02 12:51:26 +08:00
    windows env variable
    in Windows Control Panel, choose System. Choose Advanced system settings. On the Advanced tab, click Environment Variables. Click New to create a new environment variable.
    控制面板 - 系统 - 高级系统设置 - 高级 - 环境变量

    win 与 wsl 环境变量共享(实际上很少遇到)
    t/793055 golang goland wsl 2
    https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3202 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:35 PVG 19:35 LAX 03:35 JFK 06:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86