#!/usr/bin/perl
$command="lscpu | grep -i Architecture";
#$arch = system($command);
@SplitArch = split(/:/, system($command));
print @SplitArch[1];
El resultado que obtengo es:
Architecture: x86_64
Esperaba que lo único que mostrara fuera:
x86_64
Respuestas
4 para la respuesta № 1Esto no hace lo que crees que hace. los system
función ejecuta el comando y devuelve su estado de salida; así que en tu caso, esto:
system($command)
huellas dactilares Architecture: x86_64
, así que esto:
@SplitArch = split(/:/, system($command));
huellas dactilares Architecture: x86_64
y conjuntos @SplitArch
a (0)
.
print @SplitArch[1]
entonces no imprime nada, porque @SplitArch
tiene un solo elemento. (Por cierto, probablemente quisiste escribir $SplitArch[1]
más bien que @SplitArch[1]
, pero eso no es ni aquí ni allá.
Ya que aparentemente tienes la intención de capturar la salida de $command
, utilizar `...`
o qx/.../
en lugar:
@SplitArch = split(/:/, `$command`);
1 para la respuesta № 2
Si desea obtener la salida de un comando, debe usar el comando qx{}
operador:
my @SplitArch = split /:/ qx{$command};
Y para imprimir el valor en el índice de matriz # 1, debe utilizar el $
Sigilo como esperas un valor escalar:
print $SplitArch[1], "n";
0 para la respuesta № 3
Creo que el valor de retorno de Sistema es el valor de salida del comando, no la salida.
Quizás deberías hacer:
$output = `$command`;
@SplitArch = split(/:/, $output);
Espero que esto ayude.
0 para la respuesta № 4
Explicación ya dada - system
no devuelve lo que usted cree que hace, solo estoy proporcionando una solución alternativa.
open(my $LSCPU, "-|", "lscpu") or die $!;
while (<$LSCPU>) {
chomp;
my ($key, $val) = split(/:s*/, $_, 2);
if ($key eq "Architecture") {
print "$valn";
last;
}
}
close($LSCPU);
Ventajas:
- Sale tan pronto como sea posible.
- No involucra la concha.
- Involucra un programa externo menos aparte del shell.
- Un ajuste más preciso de la línea deseada.