使用Perl打印当前目录

时间:2011-04-18 13:35:53

标签: perl directory

我有这段代码使用Perl打印当前目录:

use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";

但是它显示了我的脚本的文件名以及目录。

像这样:

  

C:\ Perl的\ duration.pl

我希望它只显示C:\Perl\

我该怎么做?

7 个答案:

答案 0 :(得分:40)

要获取当前工作目录(许多系统上的pwd),您可以使用cwd()代替abs_path

use Cwd qw();
my $path = Cwd::cwd();
print "$path\n";

abs_path没有争论:

use Cwd qw();
my $path = Cwd::abs_path();
print "$path\n";

有关详细信息,请参阅Cwd docs

从目录外部获取perl文件所在的目录:

use File::Basename qw();
my ($name, $path, $suffix) = File::Basename::fileparse($0);
print "$path\n";

有关详细信息,请参阅File::Basename文档。

答案 1 :(得分:14)

以下每个代码段都会获取脚本的目录,该目录与当前目录不同。目前尚不清楚你想要哪一个。

use FindBin qw( $RealBin );

say $RealBin;

use Cwd            qw( abs_path );
use File::Basename qw( dirname );

say dirname(abs_path($0));

use Cwd         qw( abs_path );
use Path::Class qw( file );

say file(abs_path($0))->dir;

答案 2 :(得分:5)

使用:

print($ENV{'PWD'});

但我觉得它在Windows上不起作用......

答案 3 :(得分:3)

只需删除'$ 0'

即可
use Cwd qw(abs_path);
my $path = abs_path();
print "$path\n";

答案 4 :(得分:2)

这是一个简单的解决方案:

    use Cwd;
    my $cwd = cwd();
    print "Current working directory: '$cwd()'";

我希望这会有所帮助。

答案 5 :(得分:1)

您可以使用FindBin

use FindBin '$RealBin';
print "$RealBin\n";

FindBin是安装Perl时安装的标准模块。要获取标准语用和模块的列表,请参阅perldoc perlmodlib

答案 6 :(得分:0)

我在带有符号链接的dirs中使用了我的脚本。 该脚本解析路径并根据路径执行命令。 我面对正确的当前路径确定。

以下是示例:

root@srv apache # pwd
/services/apache

root@srv apache # readlink -f .
/services/apache2225

Cwd模块披露路径(readlink -f的类似物) http://perldoc.perl.org/Cwd.html

root@server apache # perl -e 'use Cwd; print cwd . "\n";'
/services/apache2225

如果你需要获得像pwd这样的当前路径,你可以使用$ ENV {' PWD'}

root@srv apache # perl -e 'use Cwd; print $ENV{'PWD'}."\n";'
/services/apache

谢谢。