GNU/Linux >> Tutoriales Linux >  >> Linux

Comando exec de Linux con ejemplos

Introducción

Linux exec El comando ejecuta un comando de Shell sin crear un nuevo proceso. En su lugar, reemplaza la operación Shell actualmente abierta. Según el uso del comando, exec tiene diferentes comportamientos y casos de uso.

Este artículo demuestra cómo usar el exec Comando en Linux.

Requisitos previos

  • Acceda a la línea de comando/terminal como sudo.
  • Comprensión básica de los comandos de terminal de Linux (utilice nuestra hoja de trucos de comandos de Linux).
  • Un editor de texto de Linux como nano.

Sintaxis del comando exec de Linux

El exec la sintaxis del comando es:

exec [options] [command [arguments]] [redirection]

El comando se comporta de manera diferente según el número de argumentos:

  • Si hay un argumento presente, el exec El comando reemplaza el shell actual con el programa ejecutado. En un script de Bash, cualquier comando posterior no se ejecuta .
  • Si no hay un argumento de comando presente, todas las redirecciones ocurren en el shell actual.

El exec El comando nunca vuelve al proceso original a menos que haya un error o el comando se ejecute en una subcapa.

Opciones de comando exec de Linux

A continuación se incluye una breve explicación de todos los exec opciones:

Opción Descripción
-c Ejecuta el comando en un entorno vacío.
-l Pasa un guión (- ) como argumento cero.
-a [name] Pasa un [name] como argumento cero.

Continúe leyendo para ver cómo exec funciona a través de ejemplos.

Ejemplos de comandos exec de Linux

Los siguientes ejemplos demuestran el comportamiento del exec Comando en la terminal y a través de scripts Bash.

Uso Básico (Reemplazo de Procesos)

Para ver cómo exec funciona, haga lo siguiente:

1. Abra la terminal y enumere los procesos en ejecución:

ps

El resultado muestra el shell Bash actualmente en ejecución y el ps dominio. El shell Bash tiene un PID único.

2. Para confirmar, verifique el ID del proceso actual con:

echo $$

El PID es el mismo que el resultado del ps comando, lo que indica que este es el proceso Bash que se está ejecutando actualmente.

3. Ahora, ejecuta exec y pasa el comando de suspensión durante cien segundos:

exec sleep 100

El sleep el comando espera 100 segundos.

4. En otra pestaña de terminal, enumere todos los procesos que se están ejecutando actualmente y grep el sleep comando:

ps -ae | grep sleep

El PID para el proceso es el mismo que el PID de Bash Shell, indicando el exec comando reemplazó el proceso de shell Bash.

La sesión de Bash (pestaña de terminal) se cierra cuando se completan los cien segundos y finaliza el proceso.

Reemplazar sesión de shell actual

Usa el exec comando para reemplazar la sesión de shell actual:

1. Compruebe el PID de shell actual:

echo $$

2. Usa exec para cambiar a Bourne Shell:

exec sh

3. En otra pestaña, verifique el PID para el proceso de Bourne Shell:

ps -ae | grep "\bsh\b"

Nota: El \b en grep es Regex para hacer coincidir el límite de la palabra, lo que permite una coincidencia exacta de sh en la salida. Obtenga más información en nuestro tutorial Grep Regex.

El comando reemplaza el proceso Bash. Al salir de Bourne Shell, se sale completamente de la sesión de terminal.

Programa llamadas con exec en Bash Scripts

Para ver cómo exec funciona en scripts Bash, haga lo siguiente:

1. Abra un editor de texto, como Nano, y cree un archivo de script:

nano [script name]

2. Pegue el siguiente código:

#!/bin/bash

while true
do
        echo "1. Update "
        echo "2. Upgrade "
        echo "3. Exit"
   read Input
   case "$Input" in
        1) exec sudo apt update ;;
        2) exec sudo apt upgrade  ;;
        3) break
   esac
done

El script hace lo siguiente:

  • Línea 3 crea un infinito while bucle.
  • Líneas 5-7 imprime las tres opciones posibles.
  • Línea 8 lee la entrada del usuario en la variable $Input .
  • Línea 9 comienza un case declaración que verifica la entrada del usuario.
  • Líneas 10-11 ejecuta el apt update o apt upgrade comando en lugar del shell actual. Cuando finaliza el proceso de actualización o actualización, se cierra la sesión de terminal.
  • Línea 12 usa el break sentencia para salir del infinito while loop y finaliza el script. La sesión vuelve al shell actual como de costumbre.

3. Guarde el script y cierre Nano.

4. Ejecute el script Bash en el entorno actual para ver los resultados:

. [script name]

Ejecutar el script con el comando fuente aplica el comportamiento del script al shell Bash actual. Usa exec para ejecutar scripts Bash dentro de otros programas para una salida limpia.

Registro de secuencias de comandos Bash

El exec El comando encuentra uso en la manipulación de descriptores de archivos para el registro de errores en scripts Bash. Los descriptores de archivo predeterminados de Linux son:

  • stdin (0) - Entrada estándar
  • stdout (1) - Salida estándar
  • stderr (2) - Error estándar

Usa el exec comando y redirija los descriptores de archivo a un archivo para crear registros. Para ver cómo funciona el registro, siga los pasos a continuación:

1. Cree un script Bash de muestra:

nano logging.sh

2. Pegue el código en el archivo:

#!/bin/bash

# Create test.log file
touch test.log

# Save test.log to log_file variable
log_file="test.log"

# Redirect stdin to $log_file
exec 1>>$log_file

# Redirect stderr to the same place as stdin
exec 2>&1

echo "This line is added to the log file"
echo "And any other lines after"
eho "This line has an error and is logged as stderr"

El script redirige todos los resultados de los comandos y los errores al mismo archivo (test.log ).

3. Guarde el script y cierre el editor de texto.

4. Cambie el permiso del script a ejecutable:

chmod +x logging.sh

5. Ejecute el script:

./logging.sh

El script no genera ningún código. En su lugar, todos los registros de salida en test.log archivo.

6. Use el comando cat para ver el test.log contenido del archivo:

cat test.log

El archivo de registro contiene todas las salidas estándar y mensajes de error. Usa exec para depurar scripts y registrar entradas, salidas o errores según la situación.

Ejecutar scripts en un entorno limpio

El -c opción para el exec El comando crea un entorno limpio. Para demostrarlo, haga lo siguiente en la terminal:

1. Inicie una nueva sesión de shell Bash:

bash

2. Usa el printenv comando para imprimir todas las variables de entorno en el shell Bash actual:

printenv

El comando imprime todas las variables de entorno para la sesión de shell de Bash actual.

3. Ejecute el mismo comando usando exec con el -c bandera:

exec -c printenv

El comando printenv se ejecuta en un entorno limpio y no hay salida de variables a la consola. Usa el -c opción para ejecutar scripts o comandos en entornos limpios.

exec con comando de búsqueda

El comando de búsqueda en Linux tiene el exec comando como una opción para ejecutar una acción en el contenido descubierto. Por ejemplo, la siguiente línea ejecuta chmod comando en el find resultados del comando:

sudo find ~ -name "test.log" -exec chmod +x '{}' \;

El find El comando busca en el directorio de inicio (~ ) para el test.log y ejecuta el cambio de permiso.

Conclusión

Después de seguir los ejemplos de este tutorial, debería saber cómo usar el exec Comando de manera efectiva en scripts de Bash.

A continuación, aprenda cómo ejecutar un trabajo automáticamente al reiniciar usando Crontab.


Linux
  1. Comando wc Linux con ejemplos

  2. Comando de clasificación de Linux con ejemplos

  3. Comando Linux Tee con ejemplos

  4. Comando de cabeza de Linux con ejemplos

  5. Comando JQ en Linux con ejemplos

Comando de CD de Linux con ejemplos

Comando de vigilancia de Linux con ejemplos

Comando de espera en Linux con ejemplos

Comando de exportación de Linux con ejemplos

Comando IP de Linux con ejemplos

Comando exec de Linux con ejemplos