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.pl
script.
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.