Cygwin:使用包含windows路径的路径变量(其中包含空格)

Gui*_*ume 28 bash configuration cygwin path

我想在我的PATH中添加一些dirs.不幸的是,这些目录位于包含空间的Windows路径中(如文档和设置)

我没有尝试过:

创建一个变量:

43598811@E250BZD20015026 ~
$ winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

43598811@E250BZD20015026 ~
$ cd $winhome
bash: cd: /cygdrive/c/Documents\: No such file or directory    

43598811@E250BZD20015026 ~
$ cd "$winhome"
bash: cd: /cygdrive/c/Documents\ and\ Settings/43598811/: No such file or directory
Run Code Online (Sandbox Code Playgroud)

创建别名:

43598811@E250BZD20015026 ~
$ alias winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

43598811@E250BZD20015026 ~
$ winhome
bash: /cygdrive/c/Documents and Settings/43598811/: is a directory

43598811@E250BZD20015026 ~
$ cd winhome
bash: cd: winhome: No such file or directory
Run Code Online (Sandbox Code Playgroud)

使用软链接: 它正在工作......但我不想使用它

有什么建议吗?

Rob*_*obS 25

这有效:

$ winhome="/cygdrive/c/Documents and Settings/"
$ cd "$winhome"
$ pwd
/cygdrive/c/Documents and Settings
Run Code Online (Sandbox Code Playgroud)

  • @Guillaume:使用`cd"$ desk".应始终引用包含文件名的变量. (4认同)

Amr*_*mro 17

您可以使用cygpath将Windows路径转换为与Cygwin兼容的POSIX路径.它还可以输出一些特殊系统文件夹的位置(例如Windows主目录,桌面,我的文档等......)

p="C:\Documents and Settings"
cd "$(cygpath -u "${p}")"
Run Code Online (Sandbox Code Playgroud)

以下是Cygwin文档的一些相关链接:

  • `p2 =“ $(cygpath -u” $ {p}“)”`然后是cd“ $ p2”` (2认同)
  • 看起来(没有检查任何文档)Cygwin 能够在 Windows 路径和文件规范作为参数时自动转换它们,但如果您需要运行某些东西则不能。统计“$UTIL”,文件“$UTIL”,任何事情都可以,但不仅仅是“$UTIL”。我知道OP没有要求这样做,但这个答案是*运行*某些内容并涵盖我所描述的情况的唯一方法。 (2认同)

Chr*_*per 9

如果将路径放在引号中,则不需要转义空格,但是在调用时cd,需要将变量本身放在引号中以获得正确的行为.

所以你的变量应该像这样声明,但是使用变量周围的引号调用:

~>  winhome="/cygdrive/c/Documents and Settings/43598811/"
~>  cd "$winhome"
Run Code Online (Sandbox Code Playgroud)

这是因为变量在shell中被替换的方式.如果你cd winhome没有" ",那么一旦变量被替换,它最终看起来像这样:

cd /cygdrive/c/Documents and Settings/43598811/
Run Code Online (Sandbox Code Playgroud)

这被解析为四个独立的参数:cd,/cygdrive/c/Documents,and,和Settings/43598811/,因为目录这是没有意义的外壳/cygdrive/c/Documents不存在.


小智 6

要访问路径/ cygdrive/c/Program Files(x86),请使用\字符.

$ cd /cygdrive/c/Program\ Files\ \(x86\)
Run Code Online (Sandbox Code Playgroud)

美好的一天!


小智 5

现在可能已经很晚了,但过去几年我对这个问题采用了不同的解决方案.在cygwin.bat中,我使用subst命令为几个语句添加前缀以创建虚拟驱动器.使用此命令,您可以将驱动器号替换为非常长的路径(以及包含空格或特殊Win字符的路径).以后你可以参考他们从你的外壳和脚本直接作为/cygdrive/x/,/cygdrive/y/等.这也有助于从像Windows资源管理器等Windows shell获取这些目录的快捷方式.

在相关的说明中,如果需要,可以/cygdrive使用mountCygwin中的命令删除前缀 .看mount --help.