2013-02-24 1 views
-1

이것은 쉘 스크립트입니다. Perl에서 어떻게 동일한 작업을 수행합니까?쉘 스크립트를 Perl로 포팅하려면 어떻게해야합니까?

prfile=~/sqllib/db2profile 

profile() 
{ 
if [ -f $prfile ] && [ "$prfile" != "" ]; 
then 
     . $prfile 
else 
     read -p "Enter a valid Profile : " prfile 
     profile 
fi 
} 
profile 

여기 발견한다면 그것은 다시 근무 적절한 프로파일 파일

업데이트

#!/usr/bin/perl 
use strict; 
use warnings; 

my $profile = "$ENV{'HOME'}/sqllib/db2proile"; 
# default profile 

while (not -e $profile) { # until we find an existing file 
    print "Enter a valid profile: "; 
    chomp($profile = <>); # read a new profile 
} 

qx(. $profile); 

대한 사용자 요청 다른 . $prfile으로 실행 프로파일 파일에 대한 검사. 다른 컴퓨터에서 서로 다를 때 홈 디렉토리를 하드 코드하지 말고 동적으로 지정합니다. 나는 쉘을 가지고 Perl을 사용하여 성취하려고 노력하고있다.

+0

스크립트의 특정 부분이 어떤 문제를 일으키고 있습니까? 이 스크립트의 첫 번째 작업은 변수에 값을 할당하는 것입니다. 만약 당신이 그것에 대해 어떻게 해야할지 모르겠다면, 여기에 도움을 청하기 전에 기본적인 Perl 튜토리얼로 시작해야합니다. – Quentin

+0

** ~/sqllib/db2 **는 쉘의 **/home-direc/sqllib/db2 **와 같습니다. ** @ prfile = '~/sqllib/db2'**; , 그 작동하지 않는, 내가 할 때 **'~/sqllib/db2' **; 심지어 이것이 작동하지 않는 이유는 무엇입니까? – mviswa

+0

"작동하지 않음"을 정의하십시오. 무슨 일이 일어날 것으로 예상됩니까? 실제로는 어떻게됩니까? '@prfile = '~/sqllib/db2 ''는 출력을주지 않아야합니다 ('my use'를 잊어 버렸기 때문에'** strict **'를 사용하지 않으면 ** 오류가 발생합니다). '~/sqllib/db2'는 Perl에서 아무 것도 의미하지 않기 때문에 오류가 발생합니다. (어째서 지구상에 배열을 사용하는 이유는 무엇입니까?) – Quentin

답변

0

당신의 목표를 이해한다면 펄을 사용하여이 작업을 수행 할 수 있다고 생각하지 않습니다. 펄은 자식 프로세스로 실행되고 쉘 환경 (부모 프로세스)을 변경할 수 없기 때문입니다. 어쩌면이게 너에게 잘 될거야.

prfile=~/sqllib/db2profile 
if [ -s "$prfile" ] ; then 
    . "$prfile" 
else 
    while true ; do 
    read -p "Enter a valid Profile : " prfile 
    if [ -s "$prfile" ] ; then 
     . "$prfile" 
     break; 
    fi 
    done 
fi 
+0

스크립트에서 잘 작동하는 코드를 붙여 넣었습니다. thimg는 펄에서 다시 쓰려고합니다. – mviswa

+0

나는 이해하지만 perl에서 쉘 환경을 수정할 수는 없습니다. – pahoughton

관련 문제