Estoy aprendiendo el exec
comando. Sé que el exec
comando reemplaza el proceso que lo inició. Por lo tanto, no es posible volver al proceso que se reemplaza por exec
comando.
Se podría decir que su propósito es hacer que sea imposible volver al proceso que lo inició.
¿Pero cuáles son otros usos para tener algo como exec
disponible como un comando?
command-line
mizech
fuente
fuente
exec ssh server-that-does-byobu-on-login.example.com
muy agradable, ya que ^ A ^ D cierra la terminal por completo. (Más generalmente,exec byobu
(oexec screen
,exec tmux
).Respuestas:
En script de contenedor
exec
se usa principalmente en scripts de envoltura.Si desea modificar el entorno de un programa antes de ejecutar el programa principal, a menudo escribiría un script y al final comenzaría el programa principal. Pero no es necesario que el script permanezca en la memoria en ese momento. Entonces,
exec
se usa en estos casos para que el programa principal pueda reemplazar el script madre.Aquí hay un ejemplo práctico de ello. Su
mate-terminal.wrapper
script viene con mate-terminal. Comienzamate-terminal
con algunos argumentos adicionales al verificar los entornos del usuario.El punto a notar aquí es que hay una
exec
llamada que reemplaza este script en la memoria.Aquí hay una pregunta similar respondida en el sitio StackExchange de Unix y Linux: /unix//q/270929/19288
Para redirigir descriptores de archivo
Otro uso común de
exec
es en la redirección de descriptores de archivos.stdin
,stdout
,stderr
Puede ser redirigido a archivos usando Exec.Redireccionamiento
stdout
:exec 1>file
hará que la salida estándar sea un archivo denominadofile
para el final de la sesión de shell actual. Todo lo que se envíe a la pantalla estará en el archivo.Redireccionamiento
stdin
: también se puede usar para redirigirstdin
a un archivo. Por ejemplo, si desea ejecutar un archivo de scriptscript.sh
, simplemente puede redirigirlostdin
al archivo usandoexec 0<script.sh
.fuente
exec
eso es su uso en la redirección de descriptores de archivos.El
exec
comando reemplaza el proceso de shell actual con el comando especificado. Normalmente, cuando ejecuta un comando, se genera un nuevo proceso (bifurcado). Elexec
comando no genera un nuevo proceso. En cambio, el proceso actual se superpone con el nuevo comando. En otras palabras, elexec
comando 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
bash
shell comoen
pstree
pareceEl
bash
shell anterior todavía está allí y tienes un nuevobash
shell. Mientras que si abres un nuevo bash shell como,los
pstree
showsAquí lo viejo
bash
se 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 comandoEjemplo-2: puede abrir un archivo como
Cuando salga
vi
no 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.sh
que desea tener un archivo de registroscript.log
, puede usarexec
como,que es equivalente a
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
exec
comando que invoca la siguiente etapa.Consulte los usos del
exec
comando en los scripts de shell para obtener más información.Nota: Parte de lo anterior se toma de esto.
fuente
Hasta donde sé, también se usa para redirigir los descriptores de archivos (por ejemplo, STDOUT, STDERR, STDIN) de un script bash.
Entonces, por ejemplo, puede leer desde un archivo desde el teclado utilizando 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).
fuente