我在每个剧本中做最基本的事情
SCRIPT=`readlink -f ${0}`
HOME=`dirname $SCRIPT`
并且,鉴于$0 = C:\Users\dir\file
,readlink
给了我/cygdrive/c/CURRENT_DIRECTORY/C:\Users\dir\file
,以便下一个dirname
产生可怕的/cygdrive/c/Users/CURRENT_DIRECTORY/C:\Users\dir
而不是C:\Users\dir
或{{ 1}}
它应该以这种方式工作吗?
答案 0 :(得分:5)
似乎我找到了答案:我们应该将$0
转换为cygwin格式,然后readlink
可以使用它
ZERO=`cygpath ${0}`
SCRIPT=`readlink -f ${ZERO}`
答案 1 :(得分:2)
$ 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;