Windows 10 上 Cygwin 中的 $PATH 损坏

Windows 10 上 Cygwin 中的 $PATH 损坏

我在 Windows 10 计算机上运行 cygwin。如果我从 cygwin 命令窗口执行 $PATH,则会出现以下错误:

$ $PATH
-bash: /usr/local/bin:/usr/bin:/cygdrive/c/Program: No such file or directory

我怀疑错误与尝试创建 或 有关Program FilesProgram Files (x86)我熟悉在\Cygwin 上输入 Windows 路径名时在空格前加上 的必要性。但是,我检查了我的.bashrc文件,没有 的条目Program Files。我认为 Cygwin 安装一定自动创建了此路径条目,但不知何故它被损坏了。任何建议都将不胜感激。

答案1

$PATH一个变量,其中包含一个以冒号分隔的目录(文件夹)列表,用于搜索要执行的命令。例如,如果您输入并且得到成功的结果,则表示在*ls中列出的目录之一中找到了该命令。$PATH

这是我的一段$PATH,使用echo命令显示它

echo "$PATH"

/cygdrive/C/Users/roaima/OneDrive - Contoso/Documents/bin:/usr/local/my/bin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/WINDOWS/System32/WindowsPowerShell/v1.0:/cygdrive/c/WINDOWS/System32/OpenSSH:/cygdrive/c/Local/bin:/cygdrive/c/Local/Apps/yt-dlp_win:/cygdrive/c/Program Files/Amazon Corretto/jdk1.8.0_222/bin:…:/cygdrive/c/Users/roaima/AppData/Local/Microsoft/WindowsApps:/cygdrive/c/Program Files (x86)/Nmap:/cygdrive/c/Users/roaima/.dotnet/tools:/cygdrive/c/Program Files/SMPlayer/mpv:/cygdrive/c/Program Files/SMPlayer/mplayer:/cygdrive/c/Program Files (x86)/Sophos/Sophos SSL VPN Client/bin

即使从中间删除了一大块( ),它仍然是一个很长的列表。您可以使用并让它每行输出一个元素来稍微整理一下:printf

( IFS=:; printf "%s\n" $PATH )

/cygdrive/C/Users/roaima/OneDrive - Contoso/Documents/bin
/usr/local/my/bin
/usr/local/bin
/usr/sbin
/sbin
/usr/bin
/cygdrive/c/WINDOWS/system32

现在,解释一下当您尝试执行 时发生了什么$PATH。shell 在空白处分割行,查找要执行的第一部分,其余项作为该命令的参数。在我的例子中,第一个空格就在单词后面,OneDrive所以我的“命令”将是/cygdrive/C/Users/roaima/OneDrive,这不是可以执行的命令:

$PATH
-bash: /cygdrive/C/Users/roaima/OneDrive: Is a directory

结论?不要尝试执行$PATH- 这不是要执行的命令。

下一部分。你写道,“我熟悉在 Cygwin 上输入 Windows 路径名时在空格前加上 \ 的必要性“-如果命令位于列出的目录中,$PATH您可以按名称运行它们,而无需指定目录。例如,我可以直接运行notepad,它就可以正常工作。您还可以引用包含空格的字符串,因此

'/cygdrive/c/local programs/notepad++' myfile.txt

但如果该目录在我的目录中,$PATH我也可以运行这个:

notepad++ myfile.txt

* 或者它是一个别名或一个函数,但现在我们先忽略它们

答案2

了解它$PATH是什么以及如何“使用”它......

$ man bash将显示 Bash 的手册页...
启动后您就可以less运行它,即点击h将告诉您按什么键可以获得某些功能 - q退出帮助。

/将启动(正则表达式)搜索,这意味着输入
/^ +PATH Enter将查找标题$PATH- 以便您了解情况。

更远,tdlp.org有两个Bash guides- 虽然有些旧了,但它们仍然实用且非常有用。

相关内容