Ben*_*ton 8 cygwin environment-variables
使用 Cygwin,我通过下载源代码、运行 configure、make 和 make install 来安装环境模块。每次运行模块命令时,我都会得到:
init.c(718):WARN:165: Cannot set TCL variable '!::'
Run Code Online (Sandbox Code Playgroud)
我已经将其追溯到 Cygwin 具有以下环境变量集的事实:
$ env | grep ::
!::=::\
Run Code Online (Sandbox Code Playgroud)
有谁知道这是什么,它在哪里设置,为什么可能有必要,或者如何摆脱它?
我可能会补充说,这对 Google 来说极其困难,甚至无法在 Markdown 中正确显示。
来自评论:
$ unset '!::'
-bash: unset: `!::': not a valid identifier
Run Code Online (Sandbox Code Playgroud)
正如大约 25 年前的 Microsoft doco for Win32 和各种 Win32 程序员指南中首次讨论的那样,Windows NT 内核没有多个驱动器的概念,每个驱动器都有自己的工作目录。这种MS-DOS范式在 Win32 中使用环境变量进行模拟,通常不会由 Win32 命令解释器的set
命令显示(但通过编程相当容易访问),名称以格式(其中是驱动器号)表示。这种多工作目录的伪装,就像旧的 MS-DOS 一样,是由 Win32 API、Microsoft 的命令解释器和各种语言(包括一些 C 和 C++ 编译器)的运行时库咨询和维护的共享小说。=D:
D
cmd
当 Cygwin 进程启动时,它会将 Win32 环境块转换为“更多 UNIX-y”形式。它有一整套针对各种特定变量的硬连线特殊转换规则,例如PATH
. 它不在 Cygwin doco 中,但它也同样通过将前导转换为. 这会产生环境字符串,如 Cygwin 程序执行所看到的,形式为. 当它出于任何原因需要生成新的 Win32 环境时,它会反转此转换,例如生成一个新进程,将返回的.=D:=D:\path
=
!
!D:=D:\path
!
=
要让 Microsoft 的命令解释器显示这些环境变量,只需运行
放 ””于是人们会看到输出开始类似
=C:=C:\用户\吉姆 …
有时,这些环境变量中会出现一个额外的环境变量,:
作为驱动器号。运行与set
上面相同的命令产生输出开始
=::=::\ =C:=C:\用户\吉姆 …
在 Cygwin 将其变得“更加 UNIX-y”之后,这当然!::=::\
就是您所看到的。
因为这些是嵌入在 Win32 应用程序中的一种机制(尤其是在 Microsoft 的命令解释器中)并且部分地与 Win32 API 本身纠缠在一起,所以阻止它们的存在并不是一件容易的事。
CreateProcess()
”。Microsoft Win32 程序员参考:函数,A–G。微软出版社。1993. ISBN 9781556155178. p. 213. 归档时间: |
|
查看次数: |
833 次 |
最近记录: |