前言
你写的脚本(或程序)的应用场景肯定有很多,如:本机登录用户在程序所在的目录下运行;本机登录用户在根目录下运行;或者是远程用户使用SSH调用。
而此时,你的程序涉及到一些文件的读/写操作,这时就需要以当前程序所在绝对路径为文件路径坐标基点--以定位读/写文件的所在,才能成功地读写文件。
1. 错误方式之一
- use Cwd;
- my $cwd = getcwd();
- print "CWD PATH = ",$cwd,"\n";
这种方式:
a.在本机登录用户在程序所在目录下运行该程序时正确--获得该程序的绝对路径。
b.本机登录用户在根目录下运行和远程用户使用SSH调用获得的路径皆为“/root”
2. 错误方式之二
- #!/usr/bin/perl
- use Cwd;
- use File::Basename;
- my $cwd;
- print "\$0 = ",$0,"\n";
- if($0 =~ m{^/})
- {
- $cwd = dirname($0);
- $cwd .='/';
- }
- else
- {
- my $dir = getcwd();
- $cwd = dirname("$dir\/$0");
- }
- print "PATH = ",$cwd,"\n";
这种方式:
a. 本机登录用户在程序所在目录下使用
运行该程序时会出错--绝对路径会多一个“.”。如“/opt/xxx/.”。
3. 正确的方式
- use File::Spec;
- print "\n";
- my $path_curf = File::Spec->rel2abs(__FILE__);
- print "C PATH = ",$path_curf,"\n";
- my ($vol, $dirs, $file) = File::Spec->splitpath($path_curf);
- print "C Dir = ", $dirs,"\n";
使用这种方式就能任何场景下得到正确的当前程序的绝对路径“$dir”。
阅读(5817) | 评论(1) | 转发(0) |