exec Komenda zastępuje aktualny proces powłoki z określonym poleceniem. Zwykle po uruchomieniu polecenia spawnowany jest nowy proces (rozwidlony). exec Polecenie nie tarło nowy proces. Zamiast tego bieżący proces jest nakładany na nowe polecenie. Innymi słowy, execpolecenie jest wykonywane zamiast bieżącej powłoki bez tworzenia nowego procesu.
Istnieją trzy najczęstsze zastosowania polecenia exec:
1. Zastąpienie procesu
Przykład 1:
Jeśli otworzysz nowąbashpowłokę jako
$ bash
w pstreeto wygląda
├─gnome-terminal
├─bash───bash───pstree
Poprzednia bashskorupa wciąż tam jest, a ty masz nową bash. Natomiast jeśli otworzysz nową powłokę bash jako,
$ exec bash
na pstreepokazy
├─gnome-terminal
───bash───pstree
Tutaj stary bashzostaje zastąpiony nowym. Szczególnie przydatne jest wyjście z wielokrotnego logowania w jednym poleceniu. Jest bardziej bezpieczny i eliminuje szansę na przypadkowe opuszczenie otwartego terminalu. Zobacz Wyjdź z roota i użytkownika za pomocą jednego polecenia
Przykład 2: możesz otworzyć plik jako
$ exec vi filename.txt
Po wyjściu vinie trzeba oddzielnie zamykać terminalu, ponieważ powłoka jest już wymieniona. Po zamknięciu vi terminal jest również zamknięty.
2. Metoda przekierowania deskryptorów plików w skryptach powłoki
exec Polecenia mogą być również wykorzystywane w skryptach powłoki dynamicznie otwieranie, zamykanie i kopiowanie deskryptorów plików. Pozwala to na przekierowanie STDIN, STDERR, STDOUT i innych deskryptorów plików do różnych plików w skrypcie powłoki, zamiast ciągu wywołania polecenia. Jeśli nie określisz polecenia ani argumentów, możesz określić symbole przekierowania i deskryptory plików w celu wykonania tych funkcji.
Załóżmy, że masz skrypt powłoki, w script.shktórym chcesz mieć plik dziennika script.log, którego możesz użyć execjako
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
co jest równoważne z
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. Tworzenie etapów procesu za pomocą komendy exec
Możesz także użyć polecenia exec, aby utworzyć zestaw skryptów powłoki, które wykonują się jeden po drugim, podobnie jak etapy procesu. Zamiast odradzania nowych procesów za każdym razem, gdy trzeba przenieść kontrolę do następnego skryptu, należy wykonać polecenie exec.
W takim przypadku ostatnią instrukcją każdego etapu powinno być execpolecenie wywołujące następny etap.
Aby dowiedzieć się więcej, zobacz zastosowania execpolecenia w skryptach powłoki .
Uwaga: Część powyższego wzięto z tego.