2

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

  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/cygdrive/c/Users/dir

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

4

2 回答 2

5

看来我找到了答案:我们应该转换$0成 cygwin 格式然后readlink可以使用它

ZERO=`cygpath ${0}`
SCRIPT=`readlink -f ${ZERO}`
于 2012-09-28T19:50:44.170 回答
2

cygwin(Windows 7)中的 readlink 让我发疯。相同的代码工作,然后不工作,时不时地,输入数据没有变化。大多数情况下它现在不起作用(2013 年 5 月)。它于 2013 年 1 月开始工作。

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

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

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

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;
于 2013-05-05T15:17:01.687 回答