我有这段代码使用Perl打印当前目录:
use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";
但是它显示了我的脚本的文件名以及目录。
像这样:
C:\ Perl的\ duration.pl
我希望它只显示C:\Perl\
。
我该怎么做?
答案 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
谢谢。