2012-09-28 14 views
2

我做的最最基本的東西在每個腳本的readlink 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/cygdrive/c/Users/dir

是它應該這樣工作?

回答

5

看來,我已經找到了答案:我們應該$0轉換成Cygwin的格式,然後readlink可以使用它在Cygwin的

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

的readlink(Windows 7中)讓我發瘋了。相同的代碼起作用,然後不起作用,無需改變輸入數據。大多數情況下現在不工作(2013年5月)。它在2013年1月。

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

但嘗試在運行的程序,它並不總是工作。 readlink(`cygpath $ 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; 
+0

我有這個完全相同的問題...的readlink僅僅間歇性shell腳本內工作時,但似乎在從一個Cygwin的終端直接運行始終工作。你有沒有想過一個解決方法或問題是什麼? –

+0

在一些win7上仍然有這個問題,readlink在某些文件夾中失敗。 – mosh