Sie müssen Argumente im Skript adcfgclone.pl übergeben

Sie müssen Argumente im Skript adcfgclone.pl übergeben

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.plSkript 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.

verwandte Informationen