컴파일 타임에 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"
귀하의 애플리케이션 비밀번호만 물어볼 것입니다.