2011-03-11 4 views
1

나는 /a/b/c/a.pl 아래에 스크립트가 있습니다. 하지만 을 사용하여 액세스하고 있습니다. symlink 경로를 사용하여 스크립트를 실행할 때 어떻게 경로를 읽을 수 있습니까? 내가 /a/b/c/a.pl를 사용할 때perl 심볼릭 링크 된 경로

  • , 나는 /a/sl/c/a.pl를 사용할 때, 나는 /a/sl/c
+0

은 죽음의 앨범 중 하나의 이름이 아닙니까? – CheeseConQueso

답변

3

난 당신이 요구하는지 모르겠어요 가야 /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"; 
    
  • +0

    FindBin은 괜찮지 만 링크가 해결되기를 원하지 않습니다. – Kamikaze

    -1

    을 * 괜찬아 시스템의 경우 적어도, 당신은 $ENV{PWD} 또는 `pwd`를 사용할 수 있습니다.

    +0

    '$ ENV {PWD}'는 작업 디렉토리 만 가져올 수 있습니다.이 디렉토리는 스크립트의 위치와 관련이 없을 수도 있습니다. –

    +0

    아 맞아. 어떤 방법으로 스크립트가 (_i.e._,'cd/a/sl/c /; perl a.pl') 디렉토리에서 실행되고 있다고 가정합니다. 아마도'perl -e .. '로 테스트했기 때문일 것입니다. – rayners

    +0

    'File :: Basename을 사용하십시오; my $ script_path = dirname ($ 0); if ($ script_path eq ".") { $ script_path = $ ENV {PWD}; } #works for me' – Kamikaze

    1

    $0은 이후에 나오는 변수입니다.