bash Cygwin:使用包含一个窗口路径的路径变量(在其中有一个空格)



configuration path (7)

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

$ cd /cygdrive/c/Program\ Files\ \(x86\)

美好的一天!

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

我没有成功尝试:

创建一个变量:

[email protected] ~
$ winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

[email protected] ~
$ cd $winhome
bash: cd: /cygdrive/c/Documents\: No such file or directory    

[email protected] ~
$ cd "$winhome"
bash: cd: /cygdrive/c/Documents\ and\ Settings/43598811/: No such file or directory

创建一个别名:

[email protected] ~
$ alias winhome="/cygdrive/c/Documents\ and\ Settings/43598811/"

[email protected] ~
$ winhome
bash: /cygdrive/c/Documents and Settings/43598811/: is a directory

[email protected] ~
$ cd winhome
bash: cd: winhome: No such file or directory

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

任何建议?


Answer #1

如果你正确地定义了这个变量,那么这个方法就行得通。 你的反斜杠没有很好的理由。


Answer #2

现在可能很晚了,但在过去的几年中,我对这个问题采取了不同的解决方案。 在cygwin.bat中,我添加了几条语句来使用subst命令创建虚拟驱动器。 使用此命令,可以用一个驱动器号代替真正长的路径(以及包含空格或特殊Win字符的路径)。 稍后,您可以直接从shell和脚本中将它们引用为/cygdrive/x//cygdrive/y/等等。 这也有助于从Windows Shell(如资源管理器)获取这些目录的快捷方式。

在相关说明中,如果需要,可以使用Cygwin的mount命令来清除/cygdrive前缀。 看到mount --help


Answer #3

使用cygpath --mydocs

根据cygpath --help其他特殊文件夹 - cygpath --help

-A, --allusers        use `All Users' instead of current user for -D, -O, -P
-D, --desktop         output `Desktop' directory and exit
-H, --homeroot        output `Profiles' directory (home root) and exit
-O, --mydocs          output `My Documents' directory and exit
-P, --smprograms      output Start Menu `Programs' directory and exit
-S, --sysdir          output system directory and exit
-W, --windir          output `Windows' directory and exit

Answer #4

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

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

~>  winhome="/cygdrive/c/Documents and Settings/43598811/"
~>  cd "$winhome"

这是因为变量在shell中被替换的方式。 如果你没有使用" "来做cd winhome ,那么一旦变量被替换,结果就会变成这样:

cd /cygdrive/c/Documents and Settings/43598811/

这被解析为四个单独的参数: cd/cygdrive/c/Documentsand Settings/43598811/ ,这对shell没有意义,因为目录/cygdrive/c/Documents不存在。


Answer #5

我是一个完整的cwywin noob - 但肯定创建一个符号链接回你的Windows家庭必须是一个简单的第一步?

即:

 wh="/cygdrive/c/Documents and Settings/Erich/My Documents"
 ln -s "$wh" wh

那么你可以只是:

 ls wh

你可以做同样的事情为您的桌面等...和担心没有更多关于赢/ cyg转换?

现在编辑我已经使用cygpath - 我相信这是使用的工具 - 有或没有符号链接它是一个整洁的小包,用于处理* nix / wind path disjoint


Answer #6

这工作:

$ winhome="/cygdrive/c/Documents and Settings/"
$ cd "$winhome"
$ pwd
/cygdrive/c/Documents and Settings




cygwin