如何摆脱cygwin的路径前缀

时间:2016-04-05 18:28:27

标签: bash path cygwin cygpath

在cygwin中,为了删除路径中的/cydrive前缀,我做了这样的挂载 -

mount -c /

重申cygwin之后,当我说pwd时 - 它给了我类似的东西 - /c/Work/shared/imply-1.1.1 [实际上每个窗口c:\Work\shared\imply-1.1.1] 现在我有一个perl脚本,我正在使用cygwin运行,我看到一个错误...类似于 - 错误:找不到模块'C:\c\Work\shared\imply-1.1.1\dist\pivot\bin\pivot' 另外一个/c/这是从cygwin返回的驱动器概念导致上述错误(至少有一种方式来查看它)。

关于如何摆脱它的任何想法?

更新:为上述问题提供更好的背景信息。这是发生了什么 - 有一个脚本文件,其内容如下 -

#!/bin/bash -eu

if [ "$#" -gt 1 ]
then
  echo "usage: $0 [conf-dir]" >&2
  exit 1
fi

PWD="$(pwd)"
WHEREAMI="$(dirname "$0")"

if [ "$#" -lt 1 ] || [ "x$1" = "x" ]
then
  CONFDIR="$WHEREAMI"/../conf
else
  CONFDIR="$1"
fi

CONFDIR="$(cd "$CONFDIR" && pwd)/pivot"
WHEREAMI="$(cd "$WHEREAMI" && pwd)"

当我回应CONFDIR和WHEREAMI的内容时,我得到以下内容 -

C:\cygdrive\c\Work\shared\imply-1.1.1\conf\pivot
C:\cygdrive\c\Work\shared\imply-1.1.1\bin\

但$ {pwd}路径应该被解析为“c:\ Work .....”

那我在cygwin中做错了什么?

2 个答案:

答案 0 :(得分:0)

Don't mount C:\ as / in Cygwin

  

如果这对你有任何帮助,我打算使用类似于你想要的东西......我已经尝试过,首先在NT4上,然后在W2k上,设置一个类似* NIX的单根文件系统,其中C:\是唯一的根,其他所有设备都是某个[sub]文件夹。

     猜猜,什么?它不起作用......你不能可靠地使用   CD / DVD驱动器,当它们没有表示为磁盘字母时,你不能   在没有先破坏安装点的情况下断开可移动驱动器......维护起来太麻烦了。

此外,我已经在同一台机器上混合了Cygwin,Strawberry和perl的自定义MSVC版本十多年了,我不明白/cygdrive前缀是如何出现问题的

在Cygwin Bash中,以下内容按预期工作:

$ ls D:/Src

cmd.exe

C:\Users> c:\opt\cygwin64\bin\perl -E "opendir $h, 'D:/Src'; say for readdir $h"

也按预期工作。

另见the CYGWIN environment variable

  

(no)dosfilewarning - 如果设置,Cygwin将在用户第一次使用“MS-DOS”样式路径名而不是POSIX样式路径名时发出警告。默认为关闭。

答案 1 :(得分:0)

关于cygpath(转换Unix和Windows格式的路径,或输出系统路径信息)...

$ pwd
/cygdrive/c/Windows/System32

$ cygpath -w $(pwd)
C:\Windows\System32