在 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 中获取当前工作目录路径的主要内容,如果未能解决你的问题,请参考以下文章

如何获取当前工作目录路径 c#?

linux系统中的当前工作目录什么意思啊?

R语言---快速设置切换工作目录

如何获取 Qt 应用程序的当前工作目录路径?

Python笔记os-- 获取设置当前工作目录

linux shell脚本如何获取“当前工作路径”,“执行脚本所在路径”,“执行脚本所在路径和执行路径的相对路径”?(当前目录脚本目录脚本路径)