• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Buffer2Disk
V2EX  ›  程序员

win10 上面执行 go 的命令偶尔一直提示不是可运行的程序

  •  
  •   Buffer2Disk · Jun 28, 2019 · 4294 views
    This topic created in 2593 days ago, the information mentioned may be changed or developed.

    如题,操作系统是 win10,golang 的环境变量配置应该是没问题的

    不知道为啥 执行 go 的命令,总是偶尔提示不是可运行的程序, 比如 go version , go build

    然后把 cmd 窗口关掉,再打开又好了,然后过几天又出现了相同的问题

    大家有碰到过这种情况吗?

    试过 go 1.11 ,1.12 版本都有这个情况。

    相同的机器上面,cmd 窗口 执行 java 命令就一直没有问题,稳如老狗

    23 replies    2019-07-07 02:04:20 +08:00
    misaka19000
        1
    misaka19000  
       Jun 28, 2019
    也许是 win10 的 bug
    Buffer2Disk
        2
    Buffer2Disk  
    OP
       Jun 28, 2019
    @misaka19000 非常的蛋疼,我之前是一直配置在系统变量里面的;

    我刚刚试了下在用户变量里面也配置了个,好像又正常了
    holajamc
        3
    holajamc  
       Jun 28, 2019
    偶尔 一直
    总是 偶尔
    所以……
    geelaw
        4
    geelaw  
       Jun 28, 2019 via iPhone   ❤️ 1
    @misaka19000 #1 微软真惨,什么锅都能被甩到自己头上

    我来试试念力 debug 法:楼主说关掉 cmd 再打开就又正常了,一个简单的假设是有些程序修改了正在运行的 cmd 的(进程级别)环境变量,尤其是 PATH,例如可能会在 PATH 的开头追加一些目录(并且忘记判断是否 PATH 已经含有需要路径而无脑增加),但是环境变量的总长度有限制,所以随着修改的次数增加,go 所在的目录就被挤掉了。

    要判断是否有此事发生,首先考虑是否在命令中有 .bat/.cmd ,这些最容易修改 cmd 的环境变量。找到目标后阅读代码寻找 set 命令。

    另一种判断方法是写一个程序,它的作用是查看自己的环境变量并和一个磁盘上的存档对比,如果不同则发出提示,如果磁盘上没有则把自己的环境变量存到磁盘上。如果可以同时运行多个 cmd,那么这个程序应该根据自己父进程的 PID 决定哪一个存档应该被检查。

    接着在所有的命令后都追加调用该程序,即可看出哪两个命令之间 cmd 的环境变量发生了变化,从而定位问题所在。
    leon0903
        5
    leon0903  
       Jun 28, 2019
    @geelaw 这个回复感觉靠谱
    Buffer2Disk
        6
    Buffer2Disk  
    OP
       Jun 28, 2019
    @geelaw 大兄弟,首先感谢你的回复,看起来非常有道理

    但是,我的情况是,重新打开 cmd 就正常的几率非常低,大部分情况下,重新打开 cmd 还是老样子

    有时候重新设置一下环境变量(一模一样的环境变量),又好了(不是每一次都能成功)

    综上这么诡异的情况,所以无法判断到底是哪里出了问题

    而且你看我也说了,相同的情况下,java 的命令是一直正常的,所以我都不知道这个锅该甩给微软还是 golang 了
    Buffer2Disk
        7
    Buffer2Disk  
    OP
       Jun 28, 2019
    @geelaw 不过你给的方法不错,但是看起来很麻烦的样子,毕竟我不会写 bash = =
    Buffer2Disk
        8
    Buffer2Disk  
    OP
       Jun 28, 2019
    @Buffer2Disk 打错,bash --> bat
    geelaw
        9
    geelaw  
       Jun 28, 2019
    @Buffer2Disk #6 你一开始并没有提到重新打开正常的概率很低。(你真的读了自己写了什么吗?!

    你说重新设置环境变量就好了,那么你查看不能运行的时候 cmd 的环境变量了吗?用 set 命令可以查看。另外除了 PATH 会影响结果,PATHEXT 也有很大影响。

    从目前的信息来看,没有理由怀疑是 Windows 的问题。
    rzti483NAJ66l669
        10
    rzti483NAJ66l669  
       Jun 28, 2019
    用 Administrator 登录的?
    oneonesv
        11
    oneonesv  
       Jun 28, 2019 via Android
    请先搞明白环境变量
    unknowncheater
        12
    unknowncheater  
       Jun 28, 2019
    畢竟是三哥維護的系統,Bug 多正常
    dandycheung
        13
    dandycheung  
       Jun 28, 2019 via iPhone
    如果现实不是可运行的程序,说明可执行体已经找到了,而不能执行,是不是,硬盘出了什么读写不稳定的状况?
    blless
        14
    blless  
       Jun 28, 2019 via Android
    好歹打印一下环境变量,然后确定环境变量下进入目录打印一下截图再来说嘛
    Buffer2Disk
        15
    Buffer2Disk  
    OP
       Jun 28, 2019
    @oneonesv 大佬,请你来解释一下什么是环境变量
    Buffer2Disk
        16
    Buffer2Disk  
    OP
       Jun 28, 2019
    @geelaw 嗯,确实描述没清楚,主要是我也没抓住问题的重点啊

    目前设置了 用户变量 后,还没复现问题

    下次要是问题复现了,我再用 set 命令打印看看
    Buffer2Disk
        17
    Buffer2Disk  
    OP
       Jun 28, 2019
    @dandycheung 没有吧,java 的可执行体是放在同一个 E 盘下的,没问题
    WordTian
        18
    WordTian  
       Jun 28, 2019 via Android
    你的环境变量里用了相对引用吗?
    感觉 win10 加载环境变量好像是随机加载的。如果用了相对引用的话,可能是加载环境变量的时候,被引用的环境变量还没被加载导致的
    Buffer2Disk
        19
    Buffer2Disk  
    OP
       Jun 28, 2019
    @WordTian 对,go 的是相对的;
    但是 java 的也是相对的啊,一直都可以
    WordTian
        20
    WordTian  
       Jun 28, 2019 via Android
    @Buffer2Disk 我的 java 和 python 环境变量也是因为这种情况时好时坏的,后来改成绝对路径就好了。不过感觉绝对路径还是不太方便
    forcecharlie
        21
    forcecharlie  
       Jun 29, 2019 via iPhone
    这种问题基本上是环境变量设置顺序有关 如果相对路径的环境变量未在 path 之前设置开则不行, 然后再次 set path=%path% 则因那个环境变量已设置则可以在 path 之间展开 通过计算机属性设置环境变量通常要注意这个问题,这应该跟注册表有关。 如果你在 bat 文件中设置环境变量 则不会出现上述问题 bat 文件严格按照你预期的顺序初始化。
    Buffer2Disk
        22
    Buffer2Disk  
    OP
       Jun 29, 2019
    @forcecharlie java 和 go 的相对路径的环境变量都是在 path 之前设置开的。

    而且 go 的命令出问题的时候,我还进了 path 里面直接设置成绝对路径的,也不行
    WordTian
        23
    WordTian  
       Jul 7, 2019 via Android
    @Buffer2Disk 系统变量设完要重启啊,大兄弟
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1400 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 17:00 · PVG 01:00 · LAX 10:00 · JFK 13:00
    ♥ Do have faith in what you're doing.