Úvod
set
command je vestavěný příkaz shellu Linux, který zobrazuje a nastavuje názvy a hodnoty proměnných prostředí shell a Linux. V operačních systémech podobných Unixu set
příkazové funkce v Bourne shellu (sh
), C shell (csh
) a Korn shell (ksh
).
V tomto tutoriálu se dozvíte, co set
příkaz je a jak jej používat.
Předpoklady
- Systém se systémem Linux.
- Přístup k terminálu/příkazovému řádku.
Syntaxe příkazů Linuxové sady
Obecná syntaxe pro set
příkaz je:
set [options] [arguments]
Možnosti
V kontextu set
příkaz, [options]
jsou nastavení nebo příznaky, které jsou nastaveny nebo deaktivovány v prostředí prostředí Bash. Použijte jej k ovlivnění chování definovaných skriptů shellu a k pomoci při provádění požadovaných úloh.
- Nastavte možnost pomocí znaménka mínus (
-
) následovaná příslušnou možností. - Zrušte nastavení možnosti pomocí znaménka plus (
+
) následovanou příslušnou možností.
Argumenty
[arguments]
jsou poziční parametry a jsou přiřazeny v pořadí s následujícími parametry:
$1
$2
- ...
$n
Pokud nezadáte žádné volby nebo argumenty, příkaz vypíše všechny proměnné prostředí.
Výstupní hodnoty
set
příkaz má tři výstupní hodnoty:
0
. Označuje úspěšné dokončení.1
. Selhání způsobené neplatným argumentem.2
. Selhání má za následek zprávu o použití, obvykle proto, že chybí argument.
Možnosti příkazů sady Linux
set
poskytuje rozsáhlý seznam možností, které lze kombinovat.
Většina možností má odpovídající příznak -o flag
které lze použít k vyvolání volby. Níže uvedená tabulka uvádí všechny možnosti a jejich příslušnou alternativní formu pomocí parametru -o flag
syntaxe.
Možnosti | -o příznaky | Popis |
---|---|---|
-a | -o allexport | Označí všechny vytvořené nebo upravené proměnné nebo funkce pro export. |
-b | -o notify | Upozorňuje uživatele na ukončení úlohy na pozadí. |
-e | -o errexit | Pokyne shellu k ukončení, pokud příkaz selže, tj. pokud vypíše nenulový výstupní stav. |
-f | -o noglob | Zakáže generování souborů (globbing). |
-h | -o hashall | Vyhledává a ukládá příkazy funkcí, když je funkce definována. -h možnost je ve výchozím nastavení povolena. |
-k | -o keyword | Umístí všechny argumenty přiřazení do prostředí pro příkaz, nejen ty, které předcházejí názvu příkazu. |
-n | -o noexec | Čte příkazy, ale neprovádí je. |
-m | -o monitor | Po dokončení úkolu zobrazí zprávu. |
-p | -o privileged | Zakáže $ENV zpracování souborů a import funkcí shellu. -p možnost je ve výchozím nastavení povolena, když se skutečné a efektivní ID uživatele neshodují. Vypnutím nastavíte efektivní uid a gid na skutečné uid a gid. |
-t | -o onecmd | Přečte jeden příkaz a poté skončí. |
-u | -o nounset | Považuje nenastavené nebo nedefinované proměnné za chybu při dosazování (během rozšiřování parametrů). Neplatí pro speciální parametry, jako je zástupný znak * nebo @ . |
-v | -o verbose | Při čtení vytiskne vstupní řádky shellu. |
-x | -o xtrace | Během provádění vytiskne argumenty příkazu. |
-B | -o braceexpand | Provádí rozšíření výztuhy. |
-C | -o noclobber | Zabraňuje přepsání existujících běžných souborů přesměrováním výstupu. Ve výchozím nastavení Bash umožňuje přesměrovaný výstup k přepsání existujících souborů. |
-E | -o errtrace | Způsobuje, že funkce shellu zdědí past ERR. |
-H | -o histexpand | Povoluje nahrazování historie stylů. Tato volba je ve výchozím nastavení zapnutá, když je shell interaktivní. |
-P | -o physical | Zabraňuje následování symbolických odkazů při provádění příkazů. |
-T | -o functrace | Způsobuje, že funkce shellu zdědí past DEBUG. |
-- | není | Přiřadí zbývající argumenty pozičním parametrům. Pokud nezbývají žádné argumenty, zruší nastavení pozičních parametrů. |
- | není k dispozici | Přiřadí všechny zbývající argumenty pozičním parametrům. Vypne -x a -v možnosti. |
není k dispozici | -o emacs | Používá rozhraní pro úpravu řádků ve stylu emacs. |
není k dispozici | -o history | Povolí historii příkazů. |
není k dispozici | -o ignoreeof | Shell se při čtení konce souboru neukončí. |
není k dispozici | -o interactive-comments | Umožňuje komentáře v interaktivních příkazech. |
není k dispozici | -o nolog | Nezaznamenává definice funkcí do souboru historie. |
není k dispozici | -o pipefail | Vrácená hodnota kanálu je stav posledního příkazu, který měl při ukončení nenulový stav. Pokud žádný příkaz neměl při ukončení nenulový stav, je hodnota nula. |
není k dispozici | -o posix | Způsobuje, že Bash odpovídá standardu, když se výchozí operace liší od standardu Posix. |
není k dispozici | -o vi | Používá rozhraní pro úpravu řádků podobné vi . |
Příklady příkazů sady Linux
Tato část uvádí příklady nejběžnějších použití set
příkaz.
Použití nastaveného příkazu bez možností
Spuštěním příkazu bez voleb nebo argumentů se zobrazí seznam všech nastavení - názvy a hodnoty všech proměnných a funkcí shellu. Protože je seznam velmi dlouhý, můžete jej procházet pomocí Page Up a O stránku dolů klíče.
Následuje příklad částečné set
výstup příkazu:
Ladění skriptů
set
příkaz je zvláště užitečný, když se pokoušíte ladit své skripty. Použijte -x
pomocí set
příkaz, abyste viděli, který příkaz ve vašem skriptu se provádí po výsledku, což vám umožní určit výsledek každého příkazu.
Následující příklad ukazuje, jak ladit skripty pomocí set -x
. Postupujte podle následujících kroků:
1. Spusťte set -x
:
set -x
2. Pomocí svého oblíbeného textového editoru (my používáme editor vi) vytvořte skript. Vytvořili jsme jednoduchou smyčku, která nám umožňuje vidět -x
efekty možností:
x=10
while [ $x -gt 0 ]; do
x=$[ $x-1 ]
echo $x
sleep 2
done
3. Ujistěte se, že jste skript chmodovali, aby byl spustitelný. Tento krok je vždy povinný před spuštěním skriptu . Syntaxe je:
chmod +x [script-name.sh]
4. Spusťte skript. Syntaxe je:
./[script-name.sh]
Výstup vytiskne jeden řádek po druhém, spustí jej, zobrazí výsledek, pokud nějaký existuje, a přesune se na další řádek.
Dalším způsobem, jak povolit ladění, je umístit -x
příznak na řádku shebang skriptu:
#!/bin/bash -x
Export skriptu
Automaticky exportujte jakoukoli proměnnou nebo funkci vytvořenou pomocí -a
volba. Export proměnných nebo funkcí umožňuje použití jiných podsložek a skriptů.
Povolte export skriptu spuštěním následujícího příkazu:
set -a
Následující příklad ukazuje, jak funguje export skriptů. Postupujte podle následujících kroků:
1. Vytvořte nový skript pomocí zvoleného editoru. Například:
one=1
two=2
three=3
four=4
/bin/bash
/bin/bash
argument označuje začátek nového shellu.
2. Zkontrolujte, zda skript funguje v novém prostředí:
echo $one $two $three $four
Výstup dokazuje, že funkce, kterou jsme vytvořili, byla exportována a funguje i při spuštění nového shellu.
Ukončit, když příkaz selže
Použijte -e
možnost dát pokyn skriptu k ukončení, pokud během provádění narazí na chybu. Zastavení částečně funkčního skriptu pomáhá předcházet problémům nebo nesprávným výsledkům.
Chcete-li tuto možnost otestovat, vytvořte skript s následujícím obsahem:
#!/bin/bash
set -e
cat nonexistingfile
echo "The end"
Ve výše uvedeném příkladu skript narazí na chybu, když se pokouší zobrazit obsah nonexistingfile
protože tento soubor neexistuje, což způsobí jeho ukončení v tomto bodě. Tedy finální echo
příkaz není proveden.
Zabránění ztrátě dat
Výchozí nastavení Bash je přepsat existující soubory. Nicméně pomocí -C
volba nakonfiguruje Bash tak, aby nepřepisoval existující soubor při přesměrování výstupu pomocí >
, >&
nebo <>
je přesměrován na tento soubor.
Například:
Bash nám nejprve umožňuje přepsat listing.txt
soubor. Nicméně po spuštění set -C
Bash vypíše zprávu, že nemůže přepsat existující soubor.
Nahlásit neexistující proměnné
Výchozí nastavení v Bash je ignorovat neexistující proměnné a pracovat s existujícími. Pomocí -u
volba zabrání Bash v ignorování proměnných, které neexistují, a nahlásí problém.
Například následující skript neobsahuje set -u
a Bash toto $var2
ignoruje není definováno.
#!/bin/bash
var1="123"
echo $var1 $var2
Výstup obsahuje pouze $var1
.
Nicméně změna skriptu a přidání set -u
příkaz zabrání Bashovi ignorovat problém a nahlásí ho:
#!/bin/bash
set -u
var1="123"
echo $var1 $var2
Nastavte poziční parametry
set
příkaz může také přiřadit hodnoty pozičním parametrům. Polohový parametr je proměnná shellu, na jejíž hodnotu se odkazuje pomocí následující syntaxe:
$[N]
[N]
hodnota je číslice, která označuje pozici parametru. Například $1
je první poziční parametr, $2
je druhý parametr atd.
Například:
set first second third
Spuštěním výše uvedeného příkazu nastavíme first
aby odpovídal $1
poziční parametr, second
na $2
a third
na $3
. Zkontrolujte to pomocí příkazu echo:
echo $2
Zrušte nastavení pozičních parametrů spuštěním:
set --
Rozdělit řetězce
Použijte set
příkaz k rozdělení řetězců na základě mezer do samostatných proměnných. Například rozdělte řetězce v proměnné s názvem myvar
, který říká „Toto je test“ .
myvar="This is a test"
set -- $myvar
echo $1
echo $2
echo $3
echo $4
Tuto možnost použijte k extrahování a odfiltrování informací z výstupu příkazu, podobně jako to dělá příkaz awk.
Nastavit allexport a upozornit příznaky
-o allexport
příznak umožňuje automaticky exportovat všechny následně definované proměnné, zatímco -o notify
flag instruuje shell, aby okamžitě vytiskl zprávy o dokončení úlohy.
Chcete-li nastavit příznaky, spusťte:
set -o allexport -o notify
V následujícím příkladu vidíme, že vás shell upozorní na dokončení úlohy na pozadí od exportu skriptu: