¿Cuáles son los posibles usos del comando ejecutivo?

¿Cuáles son los posibles usos del comando ejecutivo?

Estoy aprendiendo execcomando. Sé que el execcomando reemplaza el proceso que lo inició. Por lo tanto, no es posible volver al proceso reemplazado por el execcomando.

Se podría decir que su finalidad es hacer imposible volver al proceso que lo inició.

Pero, ¿cuáles son otros usos de tener algo como execdisponible como comando?

Respuesta1

El exec comando reemplaza el proceso de shell actual con el comando especificado. Normalmente, cuando ejecuta un comando, se genera (bifurca) un nuevo proceso. El exec comando no genera un nuevo proceso. En cambio, el proceso actual se superpone con el nuevo comando. En otras palabras, el execcomando se ejecuta en lugar del shell actual sin crear un nuevo proceso.

Hay tres usos más comunes del comando exec:

1. Reemplazo de proceso

Ejemplo 1: Si abre un nuevo bashshell como

$ bash 

en pstreeello parece

├─terminal-gnome
        ├─bash───bash───pstree

El caparazón anterior bashtodavía está allí y tienes un bashcaparazón nuevo. Mientras que si abres un nuevo shell bash como,

$ exec bash

los pstreeespectáculos

├─terminal-gnome
        ├─bash───pstree

Aquí lo viejo bashse reemplaza por uno nuevo. Es particularmente útil salir de un inicio de sesión múltiple con un solo comando.Es más seguro y elimina la posibilidad de dejar un terminal abierto por error.VerSalga tanto del root como del usuario con un solo comando

Ejemplo-2:puedes abrir un archivo como

$ exec vi filename.txt

Cuando salga, vino es necesario cerrar el terminal por separado ya que el shell ya está reemplazado. Tan pronto como cierras el vi, la terminal también se cierra.

2. Un método de redirección de descriptores de archivos dentro de los scripts de shell

El exec comando también se puede utilizar en scripts de shell para abrir, cerrar y copiar dinámicamente descriptores de archivos. Eso permite realizar la redirección de STDIN, STDERR, STDOUT y otros descriptores de archivos a varios archivos dentro del script de shell, en lugar de una cadena de invocación de comando. Si no especifica un comando o argumentos, puede especificar símbolos de redirección y descriptores de archivos para realizar estas funciones.

Digamos que tiene un script de shell script.shy desea tener un archivo de registro script.log, puede usarlo execcomo,

LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1

que es equivalente a

./script &>> /path/to/script.log
./script >>  /path/to/script.log 2>&1

3. Creando etapas del proceso usando el comando exec.

También puede utilizar el comando exec para crear un conjunto de scripts de shell que se ejecutan entre sí secuencialmente como etapas del proceso. En lugar de generar nuevos procesos cada vez que necesita transferir el control al siguiente script, ejecuta el comando exec.

En este caso, la última declaración de cada etapa debe ser execel comando que invoca la siguiente etapa.

Verlos usos del execcomando en scripts de shellpara más.

Nota:Parte de lo anterior está tomado deeste.

Respuesta2

En script contenedor

execse utiliza principalmente en scripts contenedores.

Si desea modificar el entorno de un programa antes de ejecutar el programa principal, normalmente escribirá un script y al final iniciará el programa principal. Pero no es necesario que el guión permanezca en la memoria en ese momento. Entonces, execse utiliza en estos casos para que el programa principal pueda reemplazar al script madre.

He aquí un ejemplo práctico de ello. Su mate-terminal.wrapperscript viene con mate-terminal. Comienza mate-terminalcon algunos argumentos adicionales al verificar los entornos del usuario.

#!/usr/bin/perl -w

my $login=0;

while ($opt = shift(@ARGV))
{
    if ($opt eq '-display')
    {
        $ENV{'DISPLAY'} = shift(@ARGV);
    }
    elsif ($opt eq '-name')
    {
        $arg = shift(@ARGV);
        push(@args, "--window-with-profile=$arg");
    }
    elsif ($opt eq '-n')
    {
        # Accept but ignore
        print STDERR "$0: to set an icon, please use -name <profile> and set a profile icon\n"
    }
    elsif ($opt eq '-T' || $opt eq '-title')
    {
        push(@args, '-t', shift(@ARGV));
    }
    elsif ($opt eq '-ls')
    {
        $login = 1;
    }
    elsif ($opt eq '+ls')
    {
        $login = 0;
    }
    elsif ($opt eq '-geometry')
    {
        $arg = shift(@ARGV);
        push(@args, "--geometry=$arg");
    }
    elsif ($opt eq '-fn')
    {
        $arg = shift(@ARGV);
        push(@args, "--font=$arg");
    }
    elsif ($opt eq '-fg')
    {
        $arg = shift(@ARGV);
        push(@args, "--foreground=$arg");
    }
    elsif ($opt eq '-bg')
    {
        $arg = shift(@ARGV);
        push(@args, "--background=$arg");
    }
    elsif ($opt eq '-tn')
    {
       $arg = shift(@ARGV);
       push(@args, "--termname=$arg");
    }
    elsif ($opt eq '-e')
    {
        $arg = shift(@ARGV);
        if (@ARGV)
        {
            push(@args, '-x', $arg, @ARGV);
            last;
        }
        else
        {
            push(@args, '-e', $arg);
        }
        last;
    }
    elsif ($opt eq '-h' || $opt eq '--help')
    {
        push(@args, '--help');
    }
}
if ($login == 1)
{
    @args = ('--login', @args);
}
exec('mate-terminal',@args);

El punto a tener en cuenta aquí es que hay una execllamada que reemplaza este script en la memoria.

Aquí hay una pregunta similar respondida en el sitio StackExchange de Unix y Linux:https://unix.stackexchange.com/q/270929/19288

Para redirigir descriptores de archivos

Otro uso común de execes redirigir descriptores de archivos. stdin, stdout, stderrse pueden redirigir a archivos usando exec.

  1. Redirigir stdout: exec 1>filehará que la salida estándar sea un archivo con el nombre filedel final de la sesión de shell actual. Todo lo que se envíe a la pantalla estará en el archivo.

  2. Redirección stdin: también se puede utilizar para redirigir stdina un archivo. Por ejemplo, si desea ejecutar un archivo de secuencia de comandos script.sh, puede redirigirlo stdinal archivo usando exec 0<script.sh.

Respuesta3

Hasta donde yo sé, también se usa para redirigir descriptores de archivos (por ejemplo, STDOUT, STDERR, STDIN) de un script bash.

Entonces, por ejemplo, puede leer desde un archivo en lugar del teclado usando la redirección STDIN y escribir en un archivo en lugar del terminal mediante la redirección STDOUT (o podría ser STDERR dependiendo del programa).

información relacionada