首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持符号链接以获得perl的可执行绝对路径

保持符号链接以获得perl的可执行绝对路径
EN

Stack Overflow用户
提问于 2013-05-04 09:24:42
回答 2查看 973关注 0票数 2

如何获得perl可执行文件的绝对路径,但需要保留符号链接?(来自$^X变量或无论如何)

示例perl可执行文件:

代码语言:javascript
复制
$ ls -l /opt/local/bin/perl
lrwxr-xr-x  1 root  admin  8 18 nov 02:46 /opt/local/bin/perl -> perl5.12

无论如何运行perl解释器,我都希望在脚本中获得/opt/local/bin/perl

测试代码(changesbang.pl):

代码语言:javascript
复制
use strict;
use warnings;
use Cwd;
use File::Spec;
use Config;

my $fmt = "%-25s: %s\n";

printf $fmt, "The value of ^X",        $^X;

printf $fmt, "Cwd::realpath",          Cwd::realpath($^X);
printf $fmt, "Cwd::abs_path",          Cwd::abs_path($^X);

printf $fmt, "File::Spec->cannonpath", File::Spec->canonpath($^X);
printf $fmt, "File::Spec->rel2abs",    File::Spec->rel2abs($^X);

printf $fmt, "Config{perlpath}",       $Config{perlpath};

现在,当运行上面的

代码语言:javascript
复制
$ ../../../../../opt/local/bin/perl changesbang.pl
The value of ^X          : ../../../../../opt/local/bin/perl
Cwd::realpath            : /opt/local/bin/perl5.12
Cwd::abs_path            : /opt/local/bin/perl5.12
File::Spec->cannonpath   : ../../../../../opt/local/bin/perl
File::Spec->rel2abs      : /Users/jm/Develop/perl/changesbang/../../../../../opt/local/bin/perl
Config{perlpath}         : /opt/local/bin/perl5.12

没人给我通缉的/opt/local/bin/perl

问题是:如何使用约束获取想要的perl的可执行路径:

  • 应该清除绝对路径
  • 但是如果它是符号链接,应该保留它(不要将它更改为它的目标)

Ps:这里有类似的问题,如thisthis,但没有人给我答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-04 09:40:30

我建议你试试

代码语言:javascript
复制
use File::Spec::Functions qw( rel2abs canonpath );

print canonpath(rel2abs($^X));

或者,有

代码语言:javascript
复制
use Cwd::Ext 'abs_path_nd';

print abs_path_nd($^X);
票数 2
EN

Stack Overflow用户

发布于 2013-05-04 16:20:59

如果不解析符号链接,就不可能正确地完成您所要求的操作。

代码语言:javascript
复制
/a/b/c/d/e/../../../../../opt/local/bin/perl

不一定与

代码语言:javascript
复制
/opt/local/bin/perl

如果abcde中的任何一个都是符号链接。这就是为什么canonpath不改变它的原因。

你想在你的程序中引入一个bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16372713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档