在cygwin中读取链接

时间:2012-09-28 18:46:46

标签: bash cygwin

我在每个剧本中做最基本的事情

  SCRIPT=`readlink -f ${0}`
  HOME=`dirname $SCRIPT`

并且,鉴于$0 = C:\Users\dir\filereadlink给了我/cygdrive/c/CURRENT_DIRECTORY/C:\Users\dir\file,以便下一个dirname产生可怕的/cygdrive/c/Users/CURRENT_DIRECTORY/C:\Users\dir而不是C:\Users\dir或{{ 1}}

它应该以这种方式工作吗?

2 个答案:

答案 0 :(得分:5)

似乎我找到了答案:我们应该将$0转换为cygwin格式,然后readlink可以使用它

ZERO=`cygpath ${0}`
SCRIPT=`readlink -f ${ZERO}`

答案 1 :(得分:2)

cygwin中的readlink(Windows 7)让我发疯。相同的代码工作,然后不时工作,不改变输入数据。大部分它现在不起作用(2013年5月)。它于2013年1月开始运作。

$ ln -s foo bar
$ perl -e 'print readlink("/cygdrive/C/bin/bar")'
foo

但是在正在运行的程序中尝试它并不总是有效。 readlink(`cygpath $ file`)在我第一次运行时工作,但是在立即重新运行程序时,它再也无法读取相同的$ file并返回undef。

我目前正在使用这种可怕的垃圾。它有效,但我讨厌它:

if (-l $file) {
    my $real = readlink($file);
    if (!$real) {
         # KLUDGE FOR CYGWIN
         my $cmd = "perl -e 'print readlink(\"$file\")'";
         $real = `$cmd`;
         die "ERR: No link for link $file date=$fileDate" unless $real;