假设我进入系统属性窗口并向路径添加环境变量。如果我打开了一个终端窗口,它将不会意识到这个变化,所以我关闭它并打开另一个。
有没有办法让它从命令行重新加载路径信息?我特别想知道如何使用 Cygwin shell 来做到这一点,但我很乐意知道如何处理这两种情况(Cygwin 或本机终端)。
答案1
没有内置方法可以将更改自动传播到子进程,可以设置进程来监听特定消息并进行更新,但这需要在应用程序内进行特殊处理。
将环境传播到某些应用程序是例外,而不是规则。正常行为是,当创建进程时,它会从父进程获取环境的副本。对该进程内环境的更改不会传播回父进程。创建进程后,父进程环境中的任何进一步更改都不会传播给子进程。
在 Windows 上,通过该界面设置的系统变量存储在以下环境中注册表,因此理论上您可以在 cygwin 中编写一个脚本,重新读取注册表并输出当前变量,然后使用它来更新当前 shell 中的环境。
来自知识库http://support.microsoft.com/kb/104011
但请注意,对环境变量的修改不会导致立即更改。例如,如果您在进行更改后启动另一个命令提示符,则环境变量将反映以前的值(而不是当前值)。更改只有在您注销并重新登录后才会生效。
为了无需注销即可实现这些更改,请向系统中的所有窗口广播 WM_SETTINGCHANGE 消息,以便任何感兴趣的应用程序(例如 Windows 资源管理器、程序管理器、任务管理器、控制面板等)都可以执行更新。
答案2
在 Windows 控制台中,只需输入 cmd 并按 Enter 键即可。从技术上讲,这会将您置于其他会话中的新会话中,但它将具有新的环境变量。它不会有来自外部会话的会话信息。因此,任何环境变量或命令历史记录,诸如此类的东西。