¿Cómo y por qué "exec false" cierra el terminal?

8

Sé que esta es probablemente una pregunta relativamente inútil, pero tengo curiosidad por saber por qué exec falsecierra la terminal al igual que lo exithace.

También me gustaría saber si esta es una forma aceptable de cerrar la terminal o no.

dragonloverlord
fuente
También lectura relevante: ¿Cuál es la diferencia entre eval y exec?
Sergiy Kolodyazhnyy

Respuestas:

10

exec falseestá reemplazando el shell actual por la ejecución del comando false(aquí no la orden interna del shell, pero /bin/falseo lo que sea falseejecutable que viene por primera vez en el PATH) que rápidamente salidas. Si el shell era el proceso superior que se ejecutaba en su emulador de terminal, no hay más procesos ejecutándose dentro de él, por lo que el emulador de terminal está cerrado.

Esta es una forma alternativa aceptable de cerrar una terminal, al igual que muchos comandos similares:

exec true
exec sleep 0
exec echo
...

Ver también: what-does-an-exec-command-do

jlliagre
fuente
Como nota al margen, bashrealizará cierta limpieza antes de invocar, execincluida la escritura de comandos .bash_history. Entonces, si uno simplemente quiere guardar .bash_historye iniciar un nuevo shell en la misma ventana de terminal, puede hacerlo escribiendo exec bash.
Kasperd
Ok gracias que respondió a mi pregunta perfectamente :)
dragonloverlord
Y una buena pregunta! ¡Por lo tanto, votaron a favor de ambos! ;)
Fabby
@jiliagre execllama a los comandos encontrados PATH, no a los integrados. Por ejemplo, exec [[ $USER = root ]]devolverá el bash: exec: [[: not founderror. En el caso de OP, falseeso se llama is /bin/false, y no el shell incorporado. De lo contrario, buena respuesta, por lo tanto, +1. Como nota al margen, execpuede ser una especie de comando de corte, es decir, si esos tres comandos en su ejemplo se convirtieron en un script, no execse alcanzaría nada más que primero , porque execreemplazaría el shell llamado por script con cualquier comando a la derecha de exec.
Sergiy Kolodyazhnyy