Es necesario pasar argumentos en el script adcfgclone.pl

Es necesario pasar argumentos en el script adcfgclone.pl

Solo quería saber si hay alguna forma de pasar los argumentos en el script Perl ( adcfgclone.pl) durante el tiempo de compilación (es decir, los valores no deben solicitarse durante el tiempo de ejecución del script).

A continuación se muestra un ejemplo en el que paso los valores después de ejecutar el script.

Proporcione los valores necesarios para la creación del nuevo archivo de contexto 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

Nota: Estoy ingresando todos los valores anteriores durante el tiempo de ejecución del script, así que simplemente paso todos esos argumentos en un archivo y simplemente ejecuto el adcfgclone.plscript.

Respuesta1

Totalmente honesto, no sé si esto es exactamente lo que quieres. Todo ese asunto del tiempo de compilación/ejecución de Perl me resulta un poco confuso.

Puede probar autoexpect (incluido en el paquete expect). Inicialmente, debe ejecutar su aplicación Perl a través de autoexpect, respondiendo las entradas. Pero después de eso, sólo necesita ejecutar el script de salida generado por autoexpect, que completa todas las entradas.

gato 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

O más simplemente, también puedes intentar redirigir tu archivo de entrada a tu script Perl:

cat input.text 
bart

./expect-test.pl < input.text 
Enter your input: You typed: bart

Respuesta2

Probablemente sea un poco tarde para el OP, pero sigue siendo relevante si alguien más tiene la misma pregunta. Básicamente, todas las respuestas a estas preguntas están en un archivo llamado archivo de contexto. Una vez que configura el entorno de aplicaciones, el archivo de contexto está en formato ${CONTEXT_FILE}. Entonces ejecutando:

perl adcfgclone.pl appsTier "$CONTEXT_FILE"

Solo se le pedirá la contraseña de la aplicación.

información relacionada