El exec comando reemplaza el proceso de shell actual con el comando especificado. Normalmente, cuando ejecuta un comando, se genera un nuevo proceso (bifurcado). 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 nuevobashshell como
$ bash
en pstreeparece
Omegnome-terminal
├─bash───bash───pstree
El bashshell anterior todavía está allí y tienes un nuevo bashshell. Mientras que si abres un nuevo bash shell como,
$ exec bash
los pstreeshows
Omegnome-terminal
───bash───pstree
Aquí lo viejo bashse reemplaza por uno nuevo. Es particularmente útil salir del inicio de sesión múltiple en un comando. Es más seguro y erradica la posibilidad de dejar una terminal abierta por error. Vea Salir de la raíz y del usuario con un comando
Ejemplo-2: puede abrir un archivo como
$ exec vi filename.txt
Cuando salga vino hay necesidad de cerrar el terminal por separado ya que el shell ya está reemplazado. Tan pronto como cierre el vi, la terminal también estará cerrada.
2. Un método de redireccionamiento de descriptores de archivo dentro de los scripts de shell
El exec comando también se puede usar en scripts de shell para abrir, cerrar y copiar descriptores de archivos dinámicamente. Eso permite realizar la redirección de STDIN, STDERR, STDOUT y otros descriptores de archivo a varios archivos dentro del script de shell, en lugar de la cadena de invocación de comando. Si no especifica un comando o argumentos, puede especificar símbolos de redirección y descriptores de archivo para realizar estas funciones.
Supongamos que tiene un script de shell script.shque desea tener un archivo de registro script.log, puede usar 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. Crear etapas del proceso usando el comando exec
También puede usar el comando exec para crear un conjunto de scripts de shell que se ejecuten entre sí secuencialmente como etapas del proceso. En lugar de generar nuevos procesos cada vez que necesite transferir el control al siguiente script, ejecute el comando exec.
En este caso, la última declaración de cada etapa debe ser un execcomando que invoca la siguiente etapa.
Consulte los usos del execcomando en los scripts de shell para obtener más información.
Nota: Parte de lo anterior se toma de esto.