Jak i dlaczego „exec false” zamyka terminal?


Odpowiedzi:


10

exec falsezastępuje bieżącą powłokę przez wykonanie polecenia false(tutaj nie jest to wbudowana powłoka, ale /bin/falselub jakikolwiek falseplik wykonywalny, który pojawi się jako pierwszy w PATH), 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ń:

exec true
exec sleep 0
exec echo
...

Zobacz także: what-does-an-exec-command-do


Na marginesie, bashwykona pewne czyszczenie przed wywołaniem, w exectym zapisaniem poleceń do .bash_history. Jeśli więc po prostu chcesz zapisać .bash_historyi uruchomić nową powłokę w tym samym oknie terminala, możesz to zrobić, pisząc exec bash.
kasperd

Ok dziękuję, że doskonale odpowiedziałeś na moje pytanie :)
władca smoków

I dobre pytanie! dlatego poparłem oba! ;)
Fabby

@jiliagre execwywołuje polecenia znalezione w PATH, a nie wbudowane. Na przykład exec [[ $USER = root ]]zwróci bash: exec: [[: not foundbłąd. W przypadku OP falsetak się nazywa /bin/false, a nie wbudowana powłoka. W przeciwnym razie dobra odpowiedź, stąd +1. Na marginesie, execmoże być rodzajem polecenia odcinającego, tzn. Gdyby te trzy polecenia w twoim przykładzie zostały przekształcone w skrypt, nic poza pierwszym execnie byłoby osiągnięte, ponieważ execzastąpiłoby powłokę wywoływaną przez skrypt dowolnym poleceniem po prawej stronie z exec.
Sergiy Kolodyazhnyy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.