Uczę się exec
dowodzenia. Wiem, że exec
polecenie zastępuje proces, który go rozpoczął. Dlatego powrót do procesu zastąpionego exec
poleceniem jest niemożliwy .
Można powiedzieć, że jego celem jest uniemożliwienie powrotu do procesu, który go rozpoczął.
Ale jakie są inne zastosowania posiadania czegoś takiego exec
jak polecenie?
command-line
mizech
źródło
źródło
exec ssh server-that-does-byobu-on-login.example.com
bardzo mi się podoba, ponieważ ^ A ^ D całkowicie zamyka terminal. (Bardziej ogólnieexec byobu
(aexec screen
,exec tmux
),Odpowiedzi:
W skrypcie opakowania
exec
jest używany głównie w skryptach otoki.Jeśli chcesz zmodyfikować środowisko dla programu przed uruchomieniem programu głównego, często piszesz skrypt, a na końcu uruchamiasz program główny. Ale w tym momencie skrypt nie musi pozostawać w pamięci. Jest więc
exec
używany w takich przypadkach, aby główny program mógł zastąpić skrypt macierzysty.Oto praktyczny przykład. Jest to
mate-terminal.wrapper
skrypt pochodzi z mate-terminalu. Zaczyna sięmate-terminal
od kilku dodatkowych argumentów, sprawdzając środowiska użytkownika.Należy tutaj zauważyć, że istnieje
exec
wywołanie, które zastępuje ten skrypt w pamięci.Oto podobne pytanie, na które odpowiedziano w witrynie StackExchange dla systemów Unix i Linux - https://unix.stackexchange.com/q/270929/19288
Aby przekierować deskryptory plików
Innym powszechnym zastosowaniem
exec
jest przekierowywanie deskryptorów plików.stdin
,stdout
,stderr
Może zostać przekierowany do plików przy użyciu exec.Przekierowanie
stdout
-exec 1>file
spowoduje, że standardowym wyjściem będzie plik nazwanyfile
na koniec bieżącej sesji powłoki. Wszystko, co zostanie wyświetlone na wyświetlaczu, będzie znajdować się w pliku.Przekierowanie
stdin
- może być również użyte do przekierowaniastdin
do pliku. Na przykład, jeśli chcesz uruchomić plik skryptuscript.sh
, możesz po prostu przekierować gostdin
do pliku za pomocąexec 0<script.sh
.źródło
exec
, jakim jest użycie w przekierowaniu deskryptorów plików.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,exec
polecenie 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ą
bash
powłokę jakow
pstree
to wyglądaPoprzednia
bash
skorupa wciąż tam jest, a ty masz nowąbash
. Natomiast jeśli otworzysz nową powłokę bash jako,na
pstree
pokazyTutaj stary
bash
zostaje 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 poleceniaPrzykład 2: możesz otworzyć plik jako
Po wyjściu
vi
nie 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.sh
którym chcesz mieć plik dziennikascript.log
, którego możesz użyćexec
jakoco jest równoważne z
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ć
exec
polecenie wywołujące następny etap.Aby dowiedzieć się więcej, zobacz zastosowania
exec
polecenia w skryptach powłoki .Uwaga: Część powyższego wzięto z tego.
źródło
O ile wiem, jest również używany do przekierowywania deskryptorów plików (na przykład STDOUT, STDERR, STDIN) skryptu bash.
Na przykład można czytać z pliku zamiast z klawiatury za pomocą przekierowania STDIN i zapisywać do pliku zamiast terminala za pomocą przekierowania STDOUT (lub może to być STDERR w zależności od programu).
źródło