adcfgclone.pl 스크립트에 매개변수를 전달해야 합니다.

adcfgclone.pl 스크립트에 매개변수를 전달해야 합니다.

컴파일 타임에 Perl script()에 매개변수를 전달할 수 있는 방법이 있는지 궁금합니다. adcfgclone.pl(즉, 스크립트가 실행될 때 값을 묻지 않아야 합니다.)

아래는 스크립트를 실행한 후 값을 전달하는 예입니다.

새로운 APPL_TOP 컨텍스트 파일을 생성하는 데 필요한 값을 제공하십시오.

Target System Hostname (virtual or normal) [proddb] :
Target Instance is RAC (y/n) [n] : n    
Target System Database SID : proddb1    
Target System Base Directory : /d06/oravis    
Target System utl_file_dir Directory List : /usr/tmp    
Number of DATA_TOP's on the Target System [1] : 1    
Target System DATA_TOP Directory 1 [/d01/oravsn12/db/apps_st/data] : /d06/oravis/db/apps_st/data    
Target System RDBMS ORACLE_HOME Directory [/d06/oravis/db/tech_st/10.2.0] : /d06/oravis/db/tech_st/10.2.0    
Do you want to preserve the Display [null] (y/n) ? : n    
Target System Display [sharkap:0.0] :    
Target System Port Pool [0-99] : 34

참고: 스크립트가 실행되는 동안 위의 값을 모두 입력하므로 그냥 모든 매개변수를 파일에 전달한 후 스크립트를 실행합니다 adcfgclone.pl.

답변1

솔직히 말해서 이것이 정확히 당신이 원하는 것인지 모르겠습니다. 전체 Perl 컴파일 시간/런타임 문제로 인해 약간 혼란스러워졌습니다.

autoexpect를 시도해 볼 수 있습니다(expect 패키지에 포함되어 있음). 처음에는 입력에 응답하는 자동 기대를 통해 Perl 애플리케이션을 실행해야 합니다. 그러나 그런 다음 모든 입력을 채우는 autoexpect에 의해 생성된 출력 스크립트를 실행하면 됩니다.

catexpect-test.pl

#!/bin/perl

use warnings;
use strict;

print "Enter your input: ";
my $input = <STDIN>;
chomp $input;
print "You typed: $input\n";

autoexpect -f expect-test.exp ./expect-test.pl
autoexpect started, file is expect-test.exp
Enter your input: bob 
You typed: bob
autoexpect done, file is expect-test.exp

./expect-test.exp
spawn ./expect-test.pl
Enter your input: bob 
You typed: bob

또는 더 간단하게 입력 파일을 Perl 스크립트로 리디렉션해 볼 수도 있습니다.

cat input.text 
bart

./expect-test.pl < input.text 
Enter your input: You typed: bart

답변2

OP에는 약간 늦을 수 있지만 다른 사람이 동일한 문제를 겪고 있다면 여전히 관련이 있습니다. 기본적으로 이러한 질문에 대한 모든 답변은 컨텍스트 파일이라는 파일에 있습니다. 애플리케이션 환경을 설정한 후 다음을 실행하여 컨텍스트 파일을 찾습니다 ${CONTEXT_FILE}.

perl adcfgclone.pl appsTier "$CONTEXT_FILE"

귀하의 애플리케이션 비밀번호만 물어볼 것입니다.

관련 정보