No se puede "borrar settool setview" en un proceso de shell abierto con Perl IPC :: open2
Estoy creando un script en Perl que, entre otras cosas, se establece en una vista de ClearCase, genera un entorno y ejecuta herramientas de síntesis y, finalmente, procesa los informes de salida. Lo hace canalizando a un proceso de shell abierto usandoIPC::open2
.
Si configuro la vista manualmente antes de ejecutar el script Perl, parece funcionar correctamente (los subcomandos de cleartool, comopwv
trabajo). Sin embargo, cuando corro el$ct setview anassar_$proj
en el script, da el siguiente mensaje de error:
stty: standard input: Invalid argument
No tengo conocimiento de ninguna restricción que prohíba correrct setview
por canalización a un proceso de shell. ¿Alguna ayuda?
my ( $readme, $writeme );
# Open the default shell and hook to its stdin and stdout.
my $pid = open2( $readme, $writeme, "$ENV{SHELL}" ) or
croak "Cannot open IPC handles to $ENV{SHELL}\n";
runCmd("$ct pwv");
runCmd("$ct setview anassar_$proj");
runCmd("$ct pwv");
runCmd('source /vobs/blah/blah/blah/env.csh');
runCmd('echo env_var1 = $env_var1');
runCmd('echo env_var2 = $env_var2');
runCmd('echo env_var3 = $env_var3');
runCmd('exit'); # Exit from ClearCase View
runCmd('exit'); # Exit from shell.
sub runCmd {
my ( $cmd ) = @_;
my $sentinel = '___SOME_STRING_THAT_CANNOT_OCCUR_IN_OUTPUT___';
print $writeme "$cmd && echo $sentinel\n";
while ( my $output = <$readme> ) {
last if ( $output =~ /$sentinel/ );
print $output;
}
}