• Publicidad

Interactuar con Linux

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

Interactuar con Linux

Notapor later » 2008-04-06 07:07 @338

Hola buenas ... Tengo un problema.

Por ejemplo me encuentro en el directorio: /home/later/Desktop , donde también se encuentra el script en perl. Donde hace esta función:

system ("cd /");

Ejecuto el script ... y todavía me sigo encontrando en /home/later/Desktop , y yo lo que quiero es que me mueva al directorio raiz "/".

Saludos!.
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Publicidad

Notapor explorer » 2008-04-06 11:26 @518

No es cosa de Perl, es cosa del entorno de trabajo.

Todos los programas tienen: un directorio donde residen físicamente, un directorio de ejecución y un directorio donde se ejecutan (el directorio de trabajo).

Cuando arrancas un proceso, lo haces desde el directorio de ejecución. El sistema lo lee desde el directorio donde reside y le asigna como directorio de trabajo el de ejecución (normalmente). Lo puedes comprobar con

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $ENV{PWD};
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cuando el proceso termina, el sistema devuelve el control al shell de comandos, que recupera SU directorio de trabajo (que es de donde partiste).

Así que ninguna de estas combinaciones cambiará el directorio de trabajo del shell que llama a nuestro programa:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -le 'system ("cd /"); '
perl -le 'exec("cd /"); '
perl -le 'chdir "/"'
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Esto está también comentado en el perlfaq8, I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?.
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

Notapor later » 2008-04-06 12:09 @548

Entonces tal vez puedo hacerlo desde Bash. ¿Se puede incluir código Bash en un script de Perl?.
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Notapor explorer » 2008-04-06 13:03 @585

Sí, pero no conseguirás nada. Al final de la ejecución de Perl volverá adonde estabas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -le 'qx(cd /)'
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿No puedes darnos más detalles de lo que quieres hacer?
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

Notapor later » 2008-04-06 14:05 @628

Solamente quiero saber cómo hacer eso. Ejecutar el comando de cambio de directorio, pero que una vez que finalice el script permanezca en el directorio que se seleccionó dentro del script.
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Notapor explorer » 2008-04-06 14:48 @658

Tienes más información en el punto 2.8 del Unix - Frequently Asked Questions.

Por ejemplo, si tenemos este script:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
#!/bin/bash
cd /tmp
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y lo ejecutamos de forma normal, no pasará nada:
Código: Seleccionar todo
explorer@portatil:~> bin/ir_a_temporal.sh
explorer@portatil:~>

pero, si en lugar de ejecutarlo en un nuevo shell, lo interpretamos en nuestro propio shell, sí que funciona:
Código: Seleccionar todo
explorer@portatil:~> . bin/ir_a_temporal.sh
explorer@portatil:/tmp>

Como dice el FAQ, casi es mejor hacerlo con un alias.

Según la documentación de perlfaq8, habría que hacer algo así, en Perl:
Código: Seleccionar todo
explorer@portatil:~> cat bin/ir_a_temporal.pl
#!/usr/bin/perl
print "cd /tmp\n";
explorer@portatil:~> $(bin/ir_a_temporal.pl)
explorer@portatil:/tmp>
Es decir, evaluar la salida del script Perl en el propio shell.
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

Notapor later » 2008-04-10 12:34 @565

Gracias explorer me funcionó de esta forma: $(perl name.pl)
Pero el problema de ahora es que no me deja printear u hacer otras operaciones.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
h4x0rz:/home/later/Desktop# cat e.pl
#!/usr/bin/perl
print "cd /tmp\n";
h4x0rz:/home/later/Desktop# $(perl e.pl)

h4x0rz:/tmp# cd /home/later/Desktop/

h4x0rz:/home/later/Desktop# cat e.pl
#!/usr/bin/perl
print "hola\n";
print "cd /tmp\n";
h4x0rz:/home/later/Desktop# $(perl e.pl)
bash: hola: command not found
h4x0rz:/home/later/Desktop#
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Bueno vemos que en la primera ejecución del script solo puse esto dentro de él:

#!/usr/bin/perl
print "cd /tmp\n";


Y al ejecutar de la forma $(perl name.pl), se me fue a /tmp . De momento OK!.

Pero en la segunda ejecución del scrip le añadí una linea más y se quedo así:

#!/usr/bin/perl
print "hola\n";
print "cd /tmp\n";


Pero como vemos nos devuelve:
bash: hola: command not found


Por lo que amí se me ocurrio hacer esto: print "echo hola";
Pero el resultado fue que el resto del código también se me imprimió, dándome por pantalla esto:

hola
cd /tmp


Intentaré ver que puedo hacer ... Gracias
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Notapor explorer » 2008-04-10 13:40 @611

Sería interesante saber por qué quieres hacer todo esto...
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 0 invitados

cron