2010-04-09 4 views
6

필자는 Perl 스크립트를 작성 했으므로 각 사용자에게 환경을 테스트하고 해당 환경에서 Perl을 실행할 수 있는지 여부를 확인하는 데 사용되는 bash 스크립트를 작성하기 위해 모든 것을 제공하려고합니다. 스크립트.Perl, 해당 버전 및 필요한 모듈의 존재 여부를 확인하는 방법은 무엇입니까?

내가 좋아하는 것들을 테스트 할 : 모듈 JSON이 :: 없음을 사용할 수 있는지 여부

  1. 펄이 시스템에 설치되어 있는지 여부를
  2. 펄 버전 5 이상
  3. 을 가져야한다을

제안 사항을 크게 높이 평가 :-)

답변

2
if perl -MJSON::Any -e 'print "$JSON::Any::VERSION\n"' >/dev/null 2>&1 
then : OK 
else echo "Cannot find a perl with JSON::Any installed" 1>&2 
    exit 1 
fi 

; troffgroff; 기타).

JSON :: Any 버전을 테스트하려면 명령의 출력을 대신 캡처하십시오. Perl 버전을 테스트하려면 'use 5.008009;'또는 합리적인 숫자로 추가하십시오. (그렇게 오래 전에 Perl 4가 NFS 탑재 파일 시스템에서 제거되었지만, 적어도 지난 10 년 이상은 아니 었습니다.)

+0

'perl -MJSON :: Any -e1 2/dev/null'을 선호합니다. 버전을 출력하고 비트 버킷으로 보내면됩니다. – justintime

+0

@justintime : 내가 말한 것처럼, 버전의 JSON :: Any는 출력을 캡처하므로 별도의 연습으로 버전을 유지하는 방법을 설명하지 않아도됩니다. –

8

관련 항목 Perl availab 가장 쉬운 방법은 perl -v 명령의 리턴 코드 (종료 코드)를 확인하는 것입니다. 이것이 0이 아니라면 Perl을 사용하지 않는 것이 좋습니다.

이제 펄 요구 사항에 대한, 당신 해야 펄 스크립트 내부에서 그들과 함께 거래 : 코드는 펄 5.6.1 이상으로하고 modele으로 실행됩니다

#!/usr/bin/env perl 
use 5.006_001; 
use ModuleName 2.0; 

펄 위 "MODULENAME"버전 2.0 이상. Perl 버전을 bash에서 수동으로 확인할 필요가 없으므로 Perl 스크립트에서 직접 수행하는 것이 더 쉽고 쉽습니다.

참고 : 나는 종종 nawk 또는 gawkawk에 대한 명령을 (식별하는 '${PERL:-perl}'와 비슷한 구조를 사용

+0

자세한 내용을 인쇄하고 싶지 않습니다. 단지 버전 번호 만 알고 싶을 때, perl -v 명령, 제안 사항을 입력하십시오. – abubacker

+0

'use 5.006_001'을 사용하여 perl 자체의 버전 번호를 확인하십시오. perl -v는 perl 바이너리가 실행될 수 있는지 검사합니다 (=> perl이 설치되어 있는지 확인). 인쇄 된 모든 것을 무시할 수 있습니다. 실행 결과 만 반환합니다. – dbemerlin

+0

질문은 "perl이 시스템에 설치되어 있습니까"라는 질문을합니다. 당신의 대답은 "perl not found"응답 (perl이 없거나, PATH에없는 것)의 자동화를 배제합니다. 필자가 작업하는 모든 시스템에는 Perl이 시스템에 설치되어 있지만 - 질문자는 'perl이 전혀 없습니다'라는 것에 대해 걱정하고 있습니다. –

14

아니요, 셸 스크립트를 작성하지 마십시오. Perl은 이미이 작업을 완벽하게 수행하고 있습니다. 이를 수행하는 올바른 방법은 일반적인 툴 체인을 사용하여 CPAN 준비 배포를 구축하는 것입니다. 이 중 일부는 perlnewmod, perlmodstyleperlmodinstall에 설명되어 있습니다.

는 최소한의 작업 예를 들어, 따라서 디렉토리 레이아웃 만들기 : Build.PL 파일에서

. 
├── Build.PL 
├── README 
└── script 
    └── abuscript.pl 

은 넣어 : 당신의 목적 스위트하는

use 5.000; 
use Module::Build qw(); 
Module::Build->new(
    module_name  => 'abuscript', 
    dist_version  => '1.000', 
    dist_author  => 'abubacker <[email protected]>', 
    dist_abstract  => 'describe what the script does in one sentence', 
    configure_requires => { 
     'perl' => '5.000', 
    }, 
    requires   => { 
     'JSON::Any' => 0, 
    }, 
)->create_build_script; 

변경 세부 사항을. README 파일에서

, 예를 들어, 일부 설치 지침을 넣어 :

To install this module, run the following commands: 

perl Build.PL 
./Build install 

당신이 모든 것을 함께 완료되면, 당신은 실행

perl Build.PL 
./Build manifest 
./Build dist 

이것은 .tar.gz 아카이브가 발생합니다 당신이 배포 할 것입니다. 다른 CPAN 모듈처럼 사용자에게 설치하도록 알려주십시오. 그렇지 않다면 README를 읽어야합니다.

시간이 있다면 스크립트를 모듈로 변환하는 것이 좋습니다. 프로그램 pl2pm (Perl과 함께 제공)과 CPAN 모듈 Module-Starter-PBP이 도움이됩니다.

라이센스가 있으면 CPAN에 코드를 업로드하여 사용자에게 더욱 편리하게 사용할 수 있습니다. 메일 링리스트 [email protected], 웹 포럼 PerlMonks, IRC 채널 #toolchain on MagNET (irc : //irc.perl.org/toolchain)

+0

CPAN 표준에 따르면, 필자가 직접 .pm 파일을 가지고 있다면 어디서 Build.PL과 파일 구조를 추가해야합니까? 또한 하나의 Perl 스크립트가있는 경우 'script1.pl'및 'script2.pl'을 말하면 어떻게 Build.PL에 추가 할 수 있습니까? module_name => 'script1.pl, script2.pl',? 이것에 대한 예를 찾을 수 없었습니다. –

+0

예제 : 패키지 선언이'Fus :: Roh :: Da' 인 메인 모듈을 가지고 있다면 이름을'Da.pm'로 바꾸고'lib/Fus/Roh/Da.pm'로 옮깁니다. 'Build.PL'에서 [module_name => 'Fus :: Roh :: Da''] (http://p3rl.org/Module::Build::API#module_name)을 지정하십시오. 두 개의 스크립트를'script' 서브 디렉토리에두면 나머지는 설치시 자동으로 작동합니다. -'perl Build.PL --install_base/tmp;를 실행하여 빌드 파일을 테스트 할 수 있습니다. ./Build install'을 실행하고'/ tmp' 디렉토리에서 결과를 확인하십시오. './Build distclean'을 실행하고 수동으로 설치 파일을 제거하고 다시 시작하십시오. – daxim

+0

네가 한 말대로 했어. 내 대본은 지금 어디 있습니까? 나는 그것을/usr/bin 어딘가에 복사하고 script.pl에서 이름을 스크립트로 바꾸고 실행 권한을 추가 할 것을 예상했다.내가 얻는 것은 빈 디렉토리'/ usr/lib/perl5/site_perl/auto/TerminalHero'이다. BTW, Build는 부드럽게'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 오류 : '/ usr/lib/perl5/site_perl/auto/TerminalHero'를 만들 수 없음 '/ usr/lib/perl5/site_perl/auto/TerminalHero'에 대한 쓰기 권한이 없음 !!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! ' – ciembor

관련 문제