Wiem, że jest to prawdopodobnie dość bezcelowe pytanie, ale jestem ciekawy, dlaczego exec false
zamyka terminal tak jak exit
robi.
Chciałbym również wiedzieć, czy jest to dopuszczalny sposób zamknięcia terminalu, czy nie.
command-line
władca smoków
źródło
źródło
Odpowiedzi:
exec false
zastępuje bieżącą powłokę przez wykonanie poleceniafalse
(tutaj nie jest to wbudowana powłoka, ale/bin/false
lub jakikolwiekfalse
plik wykonywalny, który pojawi się jako pierwszy wPATH
), który szybko kończy działanie. Jeśli powłoka była najwyższym procesem uruchomionym w emulatorze terminali, nie ma w niej żadnych procesów, więc emulator terminala jest zamknięty.Jest to dopuszczalny alternatywny sposób zamknięcia terminala, podobnie jak wiele podobnych poleceń:
Zobacz także: what-does-an-exec-command-do
źródło
bash
wykona pewne czyszczenie przed wywołaniem, wexec
tym zapisaniem poleceń do.bash_history
. Jeśli więc po prostu chcesz zapisać.bash_history
i uruchomić nową powłokę w tym samym oknie terminala, możesz to zrobić, piszącexec bash
.exec
wywołuje polecenia znalezione wPATH
, a nie wbudowane. Na przykładexec [[ $USER = root ]]
zwrócibash: exec: [[: not found
błąd. W przypadku OPfalse
tak się nazywa/bin/false
, a nie wbudowana powłoka. W przeciwnym razie dobra odpowiedź, stąd +1. Na marginesie,exec
może być rodzajem polecenia odcinającego, tzn. Gdyby te trzy polecenia w twoim przykładzie zostały przekształcone w skrypt, nic poza pierwszymexec
nie byłoby osiągnięte, ponieważexec
zastąpiłoby powłokę wywoływaną przez skrypt dowolnym poleceniem po prawej stronie zexec
.