Ako a prečo by ste použili premennú $ SHLVL

Premenná $ SHLVL sa používa na to, aby ste povedali, koľko hlbokých škrupín ste. Ak vás to zmení, stojí to na začiatku.

Čo je Shell?

Skoop preberá príkazy a dá im podkladový operačný systém na vykonanie. Na väčšine systémov Linux shell program sa nazýva BASH (Bourne Again Shell), ale existujú aj iné, vrátane C Shell (tcsh) a shell KORN (ksh).

Ako pristupovať k systému Linux Shell

Vo všeobecnosti ako používateľ pracujete s programom shell pomocou programu emulačného terminálu, ako sú napríklad konzoly XTerm, konsole alebo gnome-terminál.

Ak používate správcu okien, ako napríklad Openbox alebo desktopové prostredie, ako je napríklad GNOME alebo KDE, nájdete emulátor terminálu z menu alebo pomlčka. Na mnohých systémoch sa klávesové skratky CTRL ALT a T otvoria aj terminálové okno.

Prípadne môžete prepnúť na iný tty (teletypewriter), ktorý poskytuje priamy prístup k shellu príkazového riadka. Môžete to urobiť stlačením CTRL ALT a F1 alebo CTRL ALT a F2 atď.

Čo je to Shell Level

Keď spustíte príkaz v systéme, spustí sa na niečo, čo sa nazýva úroveň shell. V rámci shell môžete otvoriť iný shell, ktorý z neho robí podsúbor alebo shell, ktorý ho otvorí.

Preto rodičovský shell by bol považovaný možno za shell 1 a detský shell by bol shell 2.

Ako zobraziť úroveň Shell

Nemalo by sa vyskytnúť prekvapenie založené na názve článku, že spôsob, ako môžete zistiť, na ktorej úrovni shellu používate, je pomocou premennej $ SHLVL.

Ak chcete zobraziť úroveň shellu, ktorú aktuálne bežíte, zadajte nasledovné:

echo $ SHLVL

Mimoriadne zaujímavé, ak spustíte uvedený príkaz v okne terminálu, možno vás prekvapí, že výsledok vrátený je 2.

Ak však použijete ten istý príkaz pomocou tty, výsledok je 1.

Prečo je to tak, že by ste sa mohli spýtať? Dobre fungujúce pracovné prostredie beží na vrchole shell. Táto shell by bola úroveň 1. Akékoľvek okno terminálu, ktoré otvoríte z prostredia tohto počítača, musí byť dieťaťom, ktoré otvorilo prostredie pracovnej plochy, a preto sa úroveň shellu nemôže spustiť na inom čísle ako 2.

TTY nepoužíva desktopové prostredie a preto je jednoducho shell úrovne 1.

Ako vytvoriť podsúbory

Najjednoduchší spôsob testovania konceptu škrupín a podsúborov je nasledujúci. Otvorte okno terminálu a zadajte nasledovné:

echo $ SHLVL

Ako vieme z terminálového okna, minimálna úroveň shellu je 2.

Teraz v okne terminálu zadajte nasledovné:

sh

Príkaz sh samotný spúšťa interaktívny shell, čo znamená, že používate shell vo vnútri shellu alebo podsvetia.

Ak znova zadáte toto:

echo $ SHLVL

Uvidíte, že úroveň shellu je nastavená na 3. Spustenie príkazu sh z podsúboru otvorí podsvetiku podsúboru a úroveň úrovne shell bude na úrovni 4.

Prečo je úroveň Shell dôležitá?

Úroveň shell je dôležitá pri premýšľaní rozsahu premenných vo vašich skriptoch.

Začnime s niečím jednoduchým:

pes = Maisie
echo $ pes

Ak spustíte uvedený príkaz v systéme, do okna terminálu sa zobrazí slovo maisie.

Otvorte nový shell zadaním nasledujúceho:

sh

Ak spustíte tento príkaz, uvidíte, že nič nie je vrátené:

echo $ pes

Je to preto, lebo premenná $ dog je k dispozícii len na úrovni shell 2. Ak zadáte exit a opustíte podsvetie a opäť spustite echo $ pes, znova sa zobrazí slovo maisie.

Stojí tiež za to premýšľať o správaní globálnych premenných v shell.

Začnite v novom okne terminálu a zadajte nasledovné:

export pes = maisie
echo $ pes

Ako ste očakávali, zobrazí sa slovo maisie. Teraz otvorte podsvietenie a znova zadajte reťazec echo $ pes. Tentokrát uvidíte, že sa zobrazí slovo maisie, aj keď ste v podsvete.

Dôvodom je to, že príkaz exportu zmenil globálny premenný pes. Zmena premennej $ pes v rámci subshell, aj keď používate príkaz export, nemá vplyv na jeho nadradené shell.

Dúfajme, že z toho môžete vidieť, že vedomie úrovne shellu, v ktorej pracujete, má určitý význam pri písaní skriptov.

Príklady, ktoré som uviedol, sú veľmi zjednodušujúce, ale je celkom bežné, aby jeden shell skript zavolal iný shell skript, ktorý naopak nazýva ďalší shell skript, ktorý sa teraz spúšťa na rôznych úrovniach. Znalosť úrovne škrupiny môže byť veľmi dôležitá.