Como e por que "exec false" fecha o terminal?

8

Sei que essa é provavelmente uma pergunta relativamente inútil, mas estou curioso para saber por que exec falsefecha o terminal da mesma forma que exitfaz.

Eu também gostaria de saber se essa é uma maneira aceitável de fechar o terminal ou não.

dragonloverlord
fonte
Leitura também relevante: qual é a diferença entre eval e exec?
Sergiy Kolodyazhnyy

Respostas:

10

exec falseestá substituindo o shell atual pela execução do comando false(aqui não o shell embutido, mas /bin/falseou qualquer falseexecutável que venha primeiro no PATH) que sai rapidamente. Se o shell foi o processo mais alto em execução no emulador de terminal, não há mais processos em execução dentro dele, portanto o emulador de terminal é fechado.

Essa é uma maneira alternativa aceitável de fechar um terminal, assim como muitos comandos semelhantes:

exec true
exec sleep 0
exec echo
...

Veja também: what-does-an-exec-command-do

jlliagre
fonte
Como observação lateral, bashexecutará certa limpeza antes de chamar, execincluindo comandos de gravação em .bash_history. Portanto, se alguém simplesmente deseja salvar .bash_historye iniciar um novo shell na mesma janela do terminal, pode fazê-lo digitando exec bash.
kasperd
Ok thanks você respondeu minha pergunta perfeitamente :)
dragonloverlord
E uma boa pergunta! por isso votou em ambos! ;)
Fabby
O @jiliagre execchama comandos encontrados em PATH, não embutidos. Por exemplo, exec [[ $USER = root ]]retornará bash: exec: [[: not founderro. No caso do OP, falseisso é chamado é /bin/false, e não o shell interno. Caso contrário, boa resposta, portanto, +1. Como uma observação lateral, execpode ser uma espécie de comando de corte, ou seja, se esses três comandos no seu exemplo foram transformados em um script, nada além do primeiro execseria alcançado, porque execsubstituiria o shell chamado pelo script por qualquer comando à direita de exec.
Sergiy Kolodyazhnyy