I know that this is probably a relatively pointless question, but I am curious as to why exec false closes the terminal just like exit does.
I would also like to know if this is a acceptable way to close the terminal or not.
I know that this is probably a relatively pointless question, but I am curious as to why exec false closes the terminal just like exit does.
I would also like to know if this is a acceptable way to close the terminal or not.
exec false is replacing the current shell by the execution of the command false (here not the shell builtin but /bin/false or whatever false executable that comes first in the PATH) which quickly exits. If the shell was the topmost process running in your terminal emulator, there are no more processes running inside it so the terminal emulator is closed.
This is a an acceptable alternate way to close a terminal, just like would be many similar commands:
exec true exec sleep 0 exec echo ... See also: what-does-an-exec-command-do
bash will perform certain cleanup before invoking exec including writing commands to .bash_history. So if one simply wants to save to .bash_history and launch a new shell in the same terminal window, one can do so by typing exec bash. exec calls commands found in PATH , not built-ins. For instance, exec [[ $USER = root ]] will return bash: exec: [[: not found error. In OP's case, false that is called is /bin/false, and not the shell built-in. Otherwise, good answer, hence +1. As a side note, exec can be sort of a cut-off command, i.e. if those three commands in your example were made into a script, nothing beyond first exec would be reached, because exec would replace shell called by script with whatever command is on the right of exec.