在 Perl 中获取当前工作目录路径
Posted
技术标签:
【中文标题】在 Perl 中获取当前工作目录路径【英文标题】:Get the current working directory path in Perl 【发布时间】:2012-04-12 17:51:07 【问题描述】:我正在使用$FindBin::RealBin
获取 perl 脚本位置。现在我在使用它时遇到了问题。
我正在从一个 Perl 脚本调用一个 Perl 脚本。
在调用者脚本中,$FindBin::RealBin
工作正常,但在被调用的 Perl 脚本中,它没有给出位置。
我错过了什么吗?
【问题讨论】:
这个工作perl.active-venture.com/lib/Cwd.html 吗?$FindBin
用于查找Perl脚本所在的目录。这与 Perl 进程的当前工作目录不同。您真正在寻找哪个?
我只想获取 perl 脚本位置。如何在调用的 perl 脚本中获取它。当我使用 $FindBin::RealBin 时,它是空的。还有什么方法可以得到吗?
How do I get the full path to a Perl script that is executing?的可能重复
【参考方案1】:
这是我经常使用的:
my ($vol,$script_path, $prog) = File::Spec->splitpath(File::Spec->rel2abs( __FILE__ ));
检查它是否适用于您的情况。如果您将内部脚本称为 shell 调用,它应该可以工作。我不知道如果你用do
调用它是否会起作用。
一些关于此的阅读:
见How do I get the full path to a Perl script that is executing?
FindBin::Bin 损坏 http://use.perl.org/~Aristotle/journal/33995(或 google 缓存 http://webcache.googleusercontent.com/search?q=cache:y-5OZsxdTT8J:use.perl.org/~Aristotle/journal/33995)
File::Basename http://perldoc.perl.org/File/Basename.html 问题较多
希望对你有帮助
【讨论】:
【参考方案2】:由于您没有提供完整的代码示例,这更多是猜测。 根据documentation,需要调用
FindBin::again();
因为这是 FindBin 的一个已知限制。
【讨论】:
【参考方案3】:如果我理解您的问题,您可以使用Cwd 中的realpath
。
$ cat ./mycode
#!/usr/bin/env perl
use strict;
use warnings;
use Cwd;
print "called as '$0'\n";
print "lives in '", Cwd::realpath($0), "'\n";
$ ./mycode
called as './mycode'
lives in '/Users/jrf/Sandbox/mycode'
【讨论】:
以上是关于在 Perl 中获取当前工作目录路径的主要内容,如果未能解决你的问题,请参考以下文章
linux shell脚本如何获取“当前工作路径”,“执行脚本所在路径”,“执行脚本所在路径和执行路径的相对路径”?(当前目录脚本目录脚本路径)