Ich wollte nur wissen, ob es eine Möglichkeit gibt, die Argumente in Perl-Skripten ( adcfgclone.pl
) während der Kompilierungszeit zu übergeben (d. h. die Werte sollten während der Skriptlaufzeit nicht abgefragt werden).
Unten ist ein Beispiel, an das ich die Werte nach dem Ausführen des Skripts übergebe.
Geben Sie die Werte an, die für die Erstellung der neuen APPL_TOP-Kontextdatei erforderlich sind.
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
Hinweis: Ich gebe alle oben genannten Werte während der Skriptausführung ein, daher übergebe ich einfach alle Argumente in einer Datei und führe das adcfgclone.pl
Skript aus.
Antwort1
Ganz ehrlich, ich weiß nicht, ob das genau das ist, was Sie wollen. Die ganze Sache mit der Kompilierzeit/Laufzeit von Perl ist für mich ein wenig verwirrend.
Sie können autoexpect ausprobieren (im expect-Paket enthalten). Zunächst müssen Sie Ihre Perl-Anwendung über autoexpect ausführen und die Eingaben beantworten. Danach müssen Sie jedoch nur noch das von autoexpect generierte Ausgabeskript ausführen, das alle Eingaben ausfüllt.
Katze expect-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
Oder einfacher: Sie können auch versuchen, Ihre Eingabedatei in Ihr Perl-Skript umzuleiten:
cat input.text
bart
./expect-test.pl < input.text
Enter your input: You typed: bart
Antwort2
Wahrscheinlich ein bisschen spät für den OP, aber immer noch relevant, falls jemand anderes die gleiche Frage hat. Grundsätzlich befinden sich alle Antworten auf diese Fragen in einer Datei namens Kontextdatei. Sobald Sie die Apps-Umgebung festgelegt haben, befindet sich die Kontextdatei in ${CONTEXT_FILE}
. Führen Sie also Folgendes aus:
perl adcfgclone.pl appsTier "$CONTEXT_FILE"
Sie werden lediglich nach dem App-Passwort gefragt.