나는 컴파일 시간 동안 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"
앱 비밀번호만 묻는 메시지가 표시됩니다.