• Publicidad

Comandos shell Linux + Perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Comandos shell Linux + Perl

Notapor The XC3LL » 2013-04-09 17:17 @762

¡Saludos!

Estoy haciéndome un pequeño script para que me saque mi "tendencia" a la hora de navegar. Para ello, la mejor idea que se me había ocurrido era utilizar la base de datos SQLite que guarda el historial en Firefox y a partir de ahí sacar las 25 páginas más visitadas ordenadas por frecuencia. Esto que a priori sería lo difícil, ya lo tengo hecho.

Mi problema reside en que dicha base de datos reside en una carpeta del perfil que Firefox crea, situada en /home/[nombreusuario]/.mozilla/firefox/[PERFIL], la cual (PERFIL) está constituida por una serie de caracteres alfanuméricos aleatorios, y depende de cada usuario y ordenador. Por tanto, si yo quisiera utilizar esta herramienta en todos mis equipos, necesitaría conocer de antemano el nombre aleatorio que se ha generado en cada equipo. Lo cual es tedioso.

La solución más simple que se me pasó por la cabeza era utilizar bash, ya que puedo sacar el nombre de la carpeta donde se encuentra fácilmente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. cd /home/$USERDIR/.mozilla/firefox/ && ls | grep .default
Coloreado en 0.016 segundos, usando GeSHi 1.0.8.4


Ahora bien, en mi infinita ignorancia, intenté pasar lo que devuelve la shell directamente a una variable dentro de mi código perl:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     my $ar = chr(36).'USERNAME';
  2.     my $dir = '/home/'.$ar.'/.mozilla/firefox/';
  3.     my $var = system("cd $dir && ls | grep .default");
  4.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Pero no funciona tal y como en mi cabeza pensaba, sino que simplemente ejecuta la función system() pero su salida no queda recogido en $var. ¿Alguien conoce alguna forma de recoger el resultado del comando bash en una variable dentro del script para poder trabajar con ella? La opción simple es agregar un "> output.txt" y después abrirlo y leerlo, pero me parece "poco elegante".

Gracias.
The XC3LL
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2013-03-24 15:04 @669

Publicidad

Re: Comandos shell Linux + Perl

Notapor explorer » 2013-04-09 18:52 @828

¿Usar el shell? ¡Esto es Perl! :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use autodie;                    # «Es mejor morir que regresar con deshonor» --proverbio Klingon
  4.  
  5. my $dir_firefox = "$ENV{HOME}/.mozilla/firefox";
  6.  
  7. chdir $dir_firefox;
  8.  
  9. my @dir_defaults = glob("*.default");
  10.  
  11. say for @dir_defaults;         # Sacamos todos
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

  • Utilizamos la variable %ENV para acceder al entorno.
  • Entramos en el directorio con chdir()
  • Ejecutamos una operación de expansión shell, con glob(), buscando todos los archivos que coincidan con el patrón
  • Finalmente, sacamos todos en pantalla (un usuario puede tener más de un directorio xxx.default. Yo ahora tengo dos. Uno por cada perfil)
Lo que quieres hacer, de ejecutar un comando y quedarte con el resultado, se hace con el operador qx().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comandos shell Linux + Perl

Notapor The XC3LL » 2013-04-10 07:24 @350

Cierto es que mezclar churras con merinas acaba complicando las cosas. Me quedo con tu ejemplo, que me lo voy a grabar a fuego para futuras ocasiones.

¡Gracias!
The XC3LL
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2013-03-24 15:04 @669

Re: Comandos shell Linux + Perl

Notapor explorer » 2013-04-10 11:44 @530

No hay problema en mezclar shell y Perl. Si el programa funciona, pues eso es justo lo que queremos.

Verás que hay muchos script que son así. Y precisamente por eso se llaman script, y no programas :)

Pero hay una ventaja en hacerlo todo en Perl: podrás ejecutarlo en aquellos sistemas que no tienen shell. O que el shell es diferente. O que no cuentan con todas las herramientas típicas del shell.

Ejemplo: tu usas en tu código el comando grep, dando por supuesto que estás en un sistema que tiene ese comando, cosa que no sucede en un Windows, por ejemplo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron