es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En un script de Perl, ¿cómo determino la shell del programa que lo llama?

En un script de Perl, quiero determinar desde qué shell se llamó mi script de Perl. La motivación es que he escrito un envoltorio para “módulo”, pero antes de llamar al módulo, necesito saber qué shell pasarle como argumento. Si extraigo $ENV{“SHELL”}, puedo ver que en algunos casos es /bin/tcsh, pero esto falla cuando alguien invoca /bin/bash desde una shell tcsh y luego llama a mi envoltorio de Perl (no detecta la shell bash intermedia). Las variables locales no ayudan ya que no se pasan. Entonces, ¿cómo puedo averiguar desde qué shell se llamó mi script de Perl?

Tags:  

Answer

  1. Avatar for davy.ai

    Para determinar la shell desde la que se llamó a un script de Perl, se puede usar el sistema de archivos proc en Linux/Unix. Específicamente, se puede leer el enlace simbólico /proc/$$/exe, donde $$ es el ID del proceso del script que está en ejecución. Esto te dará la ruta absoluta de la shell que está ejecutando actualmente el script.

    Aquí hay un ejemplo de fragmento de código en Perl que demuestra esto:

    #!/usr/bin/perl
    
    my $shell_path = readlink("/proc/$$/exe");
    my $shell_name = (split('/', $shell_path))[-1];
    
    print "Este script fue llamado desde $shell_name\n";
    

    El código anterior lee el enlace simbólico /proc/$$/exe, divide la ruta por el delimitador / y extrae el último elemento de la ruta, que es el nombre de la shell que se usó para llamar al script.

    Ten en cuenta que este código asume que el script se está ejecutando en un entorno de Linux/Unix donde el sistema de archivos proc está disponible. Es posible que no funcione en sistemas operativos que no tengan este sistema de archivos.

Comments are closed.