如何解决符号链接打印脚本的目录路径而不是?在不解析符号链接的情况下打印perl脚本的路径
编辑:我从下面意识到,它是不可能使用FindBin,但有没有办法获得脚本的目录?
use FindBin;
use Cwd;
use Cwd 'abs_path';
use File::Spec::Functions qw(rel2abs);
BEGIN
{
push @INC, "$FindBin::Bin";
}
print "rel2abs:";
print rel2abs("$FindBin::Bin");
print "\n";
print "abs_path:";
print abs_path("$FindBin::Bin");
print "\n";
此脚本会打印:
/tmp/one/two$ perl 3/symlink_to_four/test.pl
rel2abs:/tmp/one/two/3/four
abs_path:/tmp/one/two/3/four
我希望它打印/tmp目录一/二/ 3/symlink_to_four
/tmp/one/two/3$ ls -l
four
symlink_to_four -> four
为什么我需要这个/:桑巴配置在我的Perl脚本要运行的Linux机器中,如果我用\\linux-machine-name
替换Linux路径的第一部分,并将其余部分替换为/
与\
,我得到的Windows路径,我将它保存在一个文件中,并将被其他脚本使用,例如,在上面的示例中,我试图将/tmp/one/two/3/symlink_to_four
转换为\\linux-machine-name\one\two\3\symlink_to_four
,我知道如何计算出linux-machine-name
,我不想要解决的路径,因为我无法弄清楚解决路径的Windows等价路径,只有\\linux-machine-name\one\two\3\symlink_to_four
有效,而不是\\linux-machine-name\one\two\3\four
,这是samba配置的方式。
'FindBin'总是解析符号链接。你为什么要使用链接名称? – ThisSuitIsBlackNot
另外''FindBin :: Bin'总是一个绝对路径,因此将它传递给'rel2abs'或'abs_path'是多余的。 – ThisSuitIsBlackNot
这是很复杂的解释:(,我的脚本必须传递路径而不解析符号链接到其他脚本 – rodee