GNU/Linux >> Znalost Linux >  >> Linux

Linux exec příkaz s příklady

Úvod

Linux exec příkaz spustí příkaz Shell bez vytvoření nového procesu. Místo toho nahrazuje aktuálně otevřenou operaci Shell. V závislosti na použití příkazu exec má různé chování a případy použití.

Tento článek ukazuje, jak používat exec příkaz v Linuxu.

Předpoklady

  • Přístup k příkazovému řádku/terminálu jako sudo.
  • Základní znalost příkazů terminálu Linuxu (použijte náš cheat sheet pro příkazy Linuxu).
  • Textový editor pro Linux, jako je nano.

Syntaxe příkazu Linux exec

exec syntaxe příkazu je:

exec [options] [command [arguments]] [redirection]

Příkaz se chová odlišně v závislosti na počtu argumentů:

  • Pokud je přítomen argument, exec příkaz nahradí aktuální shell spuštěným programem. Ve skriptu Bash se žádné příkazy po nespustí .
  • Pokud není přítomen žádný argument příkazu, všechna přesměrování proběhnou v aktuálním shellu.

exec příkaz se nikdy nevrátí k původnímu procesu, pokud nedojde k chybě nebo pokud příkaz není spuštěn v subshell.

Možnosti příkazu Linux exec

Níže je stručné vysvětlení všech exec možnosti:

Možnost Popis
-c Provede příkaz v prázdném prostředí.
-l Předává pomlčku (- ) jako nultý argument.
-a [name] Projde [name] jako nultý argument.

Pokračujte ve čtení a zjistěte, jak exec funguje na příkladech.

Příklady příkazů Linux exec

Níže uvedené příklady ukazují chování exec příkaz v terminálu a prostřednictvím skriptů Bash.

Základní použití (náhrada procesu)

Chcete-li zjistit, jak exec funguje, proveďte následující:

1. Otevřete terminál a seznam běžících procesů:

ps

Výstup zobrazuje aktuálně spuštěný Bash shell a ps příkaz. Bash shell má jedinečný PID.

2. Pro potvrzení zkontrolujte aktuální ID procesu pomocí:

echo $$

PID je stejný jako výstup z ps označující, že se jedná o aktuálně spuštěný proces Bash.

3. Nyní spusťte exec a předejte příkaz spánku na sto sekund:

exec sleep 100

sleep příkaz čeká 100 sekund.

4. Na další kartě terminálu vypište všechny aktuálně spuštěné procesy a zadejte sleep příkaz:

ps -ae | grep sleep

PID pro proces je stejný jako PID prostředí Bash, což znamená exec příkaz nahradil proces prostředí Bash.

Relace Bash (záložka terminálu) se zavře, když skončí těch sto sekund a proces skončí.

Nahradit aktuální relaci prostředí

Použijte exec příkaz k nahrazení aktuální relace shellu:

1. Zkontrolujte aktuální PID shellu:

echo $$

2. Použijte exec pro přepnutí na Bourne Shell:

exec sh

3. Na další kartě zkontrolujte PID pro proces Bourne Shell:

ps -ae | grep "\bsh\b"

Poznámka: \b v grep je Regex pro shodu mezi slovy, což umožňuje přesnou shodu sh ve výstupu. Více se dozvíte v našem tutoriálu Grep Regex.

Příkaz nahrazuje proces Bash. Ukončení Bourne Shell úplně ukončí relaci terminálu.

Naprogramujte volání pomocí exec ve skriptech Bash

Chcete-li zjistit, jak exec funguje ve skriptech Bash, proveďte následující:

1. Otevřete textový editor, například Nano, a vytvořte soubor skriptu:

nano [script name]

2. Vložte následující kód:

#!/bin/bash

while true
do
        echo "1. Update "
        echo "2. Upgrade "
        echo "3. Exit"
   read Input
   case "$Input" in
        1) exec sudo apt update ;;
        2) exec sudo apt upgrade  ;;
        3) break
   esac
done

Skript provede následující:

  • Řádek 3 vytvoří nekonečný while smyčka.
  • Řádky 5–7 vytiskněte tři možné možnosti.
  • Řádek 8 přečte vstup uživatele do proměnné $Input .
  • Řádek 9 spustí case příkaz kontrolující vstup uživatele.
  • Řádky 10–11 spusťte apt update nebo apt upgrade příkaz místo aktuálního shellu. Když proces aktualizace nebo upgradu skončí, relace terminálu se ukončí.
  • Řádek 12 používá break příkaz opustit nekonečné while smyčka a ukončí skript. Relace se vrátí do aktuálního prostředí jako obvykle.

3. Uložte skript a zavřete Nano.

4. Spusťte skript Bash v aktuálním prostředí, abyste viděli výsledky:

. [script name]

Spuštění skriptu pomocí příkazu source aplikuje chování skriptu na aktuální prostředí Bash. Použijte exec spouštět Bash skripty v jiných programech pro čisté ukončení.

Protokolování Bash skriptů

exec příkaz najde využití při manipulaci s deskriptory souborů pro protokolování chyb ve skriptech Bash. Výchozí linuxové deskriptory souborů jsou:

  • stdin (0) – standardní v
  • stdout (1) – standardní výstup
  • stderr (2) – standardní chyba

Použijte exec a přesměrujte deskriptory souborů do souboru, abyste vytvořili protokoly. Chcete-li vidět, jak protokolování funguje, postupujte podle následujících kroků:

1. Vytvořte ukázkový skript Bash:

nano logging.sh

2. Vložte kód do souboru:

#!/bin/bash

# Create test.log file
touch test.log

# Save test.log to log_file variable
log_file="test.log"

# Redirect stdin to $log_file
exec 1>>$log_file

# Redirect stderr to the same place as stdin
exec 2>&1

echo "This line is added to the log file"
echo "And any other lines after"
eho "This line has an error and is logged as stderr"

Skript přesměruje všechny výstupy příkazů a chyby do stejného souboru (test.log ).

3. Uložte skript a zavřete textový editor.

4. Změňte oprávnění skriptu na spustitelný soubor:

chmod +x logging.sh

5. Spusťte skript:

./logging.sh

Skript nevydává žádný kód. Místo toho se všechny výstupní protokoly zapisují do test.log soubor.

6. Pomocí příkazu cat zobrazíte test.log obsah souboru:

cat test.log

Soubor protokolu obsahuje všechny standardní výstupy a chybová hlášení. Použijte exec k ladění skriptů a protokolování vstupů, výstupů nebo chyb v závislosti na situaci.

Spouštějte skripty v čistém prostředí

-c možnost pro exec příkaz vytváří čisté prostředí. Chcete-li demonstrovat, proveďte v terminálu následující:

1. Spusťte novou relaci prostředí Bash:

bash

2. Použijte printenv příkaz k tisku všech proměnných prostředí v aktuálním prostředí Bash:

printenv

Příkaz vytiskne všechny proměnné prostředí pro aktuální relaci prostředí Bash.

3. Spusťte stejný příkaz pomocí exec s -c příznak:

exec -c printenv

Příkaz printenv běží v čistém prostředí a do konzole se nevypisují žádné proměnné. Použijte -c možnost spouštět skripty nebo příkazy v čistých prostředích.

exec s příkazem find

Příkaz find v Linuxu má exec příkaz jako možnost provedení akce s nalezeným obsahem. Například řádek níže provede chmod příkaz na find výsledky příkazu:

sudo find ~ -name "test.log" -exec chmod +x '{}' \;

find příkaz prohledává domovský adresář (~ ) pro test.log soubor a provede změnu oprávnění.

Závěr

Po provedení příkladů z tohoto tutoriálu byste měli vědět, jak používat exec ve skriptech Bash.

Dále se dozvíte, jak automaticky spustit úlohu při restartu pomocí Crontab.


Linux
  1. Linux Tee Command s příklady

  2. Příkaz linuxové hlavy s příklady

  3. JQ Command v Linuxu s příklady

  1. wc Linux Command s příklady

  2. Linux řazení příkazů s příklady

  3. Echo Command v Linuxu (s příklady)

  1. man Command v Linuxu s příklady

  2. Příkaz AWK v Linuxu s příklady

  3. Curl Command v Linuxu s příklady