adcfgclone.pl 스크립트에서 인수를 전달해야 합니다.

adcfgclone.pl 스크립트에서 인수를 전달해야 합니다.

나는 컴파일 시간 동안 Perl 스크립트( )의 인수를 전달할 수 있는 방법이 있는지 알고 싶었습니다 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로 생성된 출력 스크립트만 실행하면 됩니다.

고양이 기대-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에는 약간 늦었지만 다른 사람이 같은 질문을 하는 경우 여전히 관련이 있습니다. 기본적으로 이러한 질문에 대한 모든 답변은 컨텍스트 파일이라는 파일에 있습니다. Apps 환경을 설정하면 컨텍스트 파일이 ${CONTEXT_FILE}. 따라서 다음을 실행하여:

perl adcfgclone.pl appsTier "$CONTEXT_FILE"

앱 비밀번호만 묻는 메시지가 표시됩니다.

관련 정보