关于“关键字>命令>cmd”的环境变量

因为每天都在使用 cmd,最近发现 listary 中这个默认的 cmd launcher不能够有效地识别环境变量。

比如我刚安装了python,会设置系统的 PATH 环境变量。设置完后,如果从开始菜单启动cmd,环境变量是立即生效的。但是如果从 listary 中启动 cmd,那么这个环境变量没有生效,必须要重启/注销以后才能生效。这样很麻烦,尤其是当打开大量应用的时候,还需要退出重新启动。

除了自定义命令外,能不能令listary中这个默认的cmd能够不用重启就识别环境变量的改变呢?

为了说明问题,我截了下面的图:

这是从开始菜单启动的cmd,虚拟环境的pip:

这是从listary启动的cmd:

pip 还是修改环境变量前的,也就是系统的pip,而不是虚拟环境的pip

好吧,我刚才打字的时候意识到,其实不用退出系统,退出listary再重新打开就好了:sweat_smile:。

主要是因为现在已经把 listary 和系统当作一体了,完全分不开了。这个帖子就当是给我自己还有其它的同学提个醒吧。

对于从 listary 内部启动的 cmd,环境变量设置后必须要重启 listary 才能生效。

如果不注意的话还是会产生问题的,有没有什么好的解决办法呢?或者 @Channing 把这个问题给修复了?

跟别的程序一样,Listary 在启动时继承了父进程的环境,包括所有的环境变量,所以只要不重启 Listary,就不可能改变继承的环境。

更灵活的做法是为 cmd 维护一个初始化 .bat 脚本,例如 init.bat,每次启动 cmd 都带上参数 /k init.bat 或者 /k init.bat >nul (屏蔽标准输出流回显)。如果偶尔启动了不带参数的 cmd,只需要简单运行一下 init.bat 命令就可以手动初始化。在这个脚本中维护所有的环境变量,还可以做其他想做的事,仅在必要的时候才动用系统注册表的环境变量。

2 Likes

感谢回复,
我没看明白。。。
还是道行太浅。。。

我还是笨办法重启 listary 吧

感谢反馈,我研究下有没有办法做到跟系统的cmd一样启动。

1 Like

另一个做法是用管理员启动CMD,不用退出listary也可以生效