나는 /a/b/c/a.pl
아래에 스크립트가 있습니다. 하지만 을 사용하여 액세스하고 있습니다. symlink 경로를 사용하여 스크립트를 실행할 때 어떻게 경로를 읽을 수 있습니까? 내가 /a/b/c/a.pl
를 사용할 때perl 심볼릭 링크 된 경로
- , 나는
/a/sl/c/a.pl
를 사용할 때, 나는/a/sl/c
나는 /a/b/c/a.pl
아래에 스크립트가 있습니다. 하지만 을 사용하여 액세스하고 있습니다. symlink 경로를 사용하여 스크립트를 실행할 때 어떻게 경로를 읽을 수 있습니까? 내가 /a/b/c/a.pl
를 사용할 때perl 심볼릭 링크 된 경로
/a/sl/c/a.pl
를 사용할 때, 나는 /a/sl/c
난 당신이 요구하는지 모르겠어요 가야 /a/b/c
FindBin
은 아마 당신이 무엇을 할 것인가 필요. perldoc FindBin
을 읽고 약 $Bin
및 $RealBin
을 읽으십시오. FindBin
을 원하지 않을 경우 , 시도 :
#!/usr/bin/env perl
use strict;
use warnings;
use Cwd;
use File::Basename;
my $i_am_at = dirname($0);
if($i_am_at eq '.'){
$i_am_at = cwd();
}
print "I am at $i_am_at\n";
FindBin은 괜찮지 만 링크가 해결되기를 원하지 않습니다. – Kamikaze
을 * 괜찬아 시스템의 경우 적어도, 당신은 $ENV{PWD}
또는 `pwd`
를 사용할 수 있습니다.
'$ ENV {PWD}'는 작업 디렉토리 만 가져올 수 있습니다.이 디렉토리는 스크립트의 위치와 관련이 없을 수도 있습니다. –
아 맞아. 어떤 방법으로 스크립트가 (_i.e._,'cd/a/sl/c /; perl a.pl') 디렉토리에서 실행되고 있다고 가정합니다. 아마도'perl -e .. '로 테스트했기 때문일 것입니다. – rayners
'File :: Basename을 사용하십시오; my $ script_path = dirname ($ 0); if ($ script_path eq ".") { $ script_path = $ ENV {PWD}; } #works for me' – Kamikaze
$0
은 이후에 나오는 변수입니다.
은 죽음의 앨범 중 하나의 이름이 아닙니까? – CheeseConQueso