La variabile $ SHLVL è usata per dirti quante shell hai in profondità. Se sei confuso da questo, vale la pena cominciare dall'inizio.
Cos'è una conchiglia?
Una shell prende i comandi e li fornisce al sistema operativo sottostante da eseguire. Sulla maggior parte dei sistemi Linux il programma shell è chiamato BASH (The Bourne Again Shell), ma ce ne sono altri disponibili tra cui C Shell (tcsh) e la shell KORN (ksh).
Come accedere alla shell di Linux
Generalmente, come utente, interagisci con il programma di shell attraverso l'uso di un programma di emulazione terminale come XTerm, konsole o gnome-terminal.
Se stai utilizzando un gestore di finestre come Openbox o un ambiente desktop come GNOME o KDE, troverai un emulatore di terminale da un menu o da un trattino. Su molti sistemi, la combinazione di tasti CTRL ALT e T aprirà anche una finestra di terminale.
In alternativa, è possibile passare a un altro TTY (teletypewriter) che fornisce l'accesso diretto a una shell della riga di comando. Puoi farlo premendo CTRL ALT e F1 o CTRL ALT e F2 ecc.
Che cos'è un livello di shell
Quando si esegue un comando in una shell, viene eseguito a un livello chiamato shell level. All'interno di una shell, puoi aprire un'altra shell che la rende una subshell o la shell che l'ha aperta.
Quindi la shell madre verrebbe considerata forse la shell di livello 1 e la shell figlio sarebbe una shell di livello 2.
Come visualizzare il livello di shell
Non dovrebbe sorprendere, in base al titolo dell'articolo, il modo in cui è possibile stabilire quale livello di shell si sta utilizzando utilizzando la variabile $ SHLVL.
Per visualizzare il livello di shell attualmente in esecuzione, digitare quanto segue:
echo $ SHLVL
È interessante notare che se si esegue il comando precedente all'interno di una finestra di terminale, si potrebbe essere sorpresi nel vedere che il risultato restituito è 2.
Se tuttavia si esegue lo stesso comando usando tty, il risultato è 1.
Perché è questo il caso che potresti chiedere? Bene, l'ambiente desktop in esecuzione viene eseguito su una shell. Quella shell sarebbe di livello 1. Qualsiasi finestra di terminale aperta da quell'ambiente desktop deve essere un elemento secondario della shell che ha aperto l'ambiente desktop e quindi il livello di shell non può essere avviato da nessun numero diverso da 2.
Il tty non sta eseguendo un ambiente desktop ed è quindi semplicemente una shell di livello 1.
Come creare sottotaste
Il modo più semplice per testare il concetto di shell e subshell è il seguente. Aprire una finestra di terminale e digitare quanto segue:
echo $ SHLVL
Come sappiamo da una finestra di terminale, il livello di shell minimo è 2.
Ora all'interno della finestra del terminale digitare quanto segue:
sh
Il comando sh esegue da solo una shell interattiva che significa che stai usando una shell all'interno di una shell o di una sottoshell.
Se ora lo scrivi di nuovo:
echo $ SHLVL
Vedrai che il livello della shell è impostato su 3. L'esecuzione del comando sh dall'interno della subshell aprirà una subshell della subshell e quindi il livello della shell sarà al livello 4.
Perché il livello della shell è importante?
Il livello della shell è importante quando si pensa all'ambito delle variabili all'interno degli script.
Iniziamo con qualcosa di semplice:
cane = Maisieecho $ dog Se si esegue il comando precedente in una shell, la parola maisie verrà visualizzata nella finestra del terminale. Apri una nuova shell digitando quanto segue: sh Se esegui questo comando, vedrai che non viene restituito nulla: echo $ dog Questo perché la variabile $ dog è disponibile solo a livello di shell 2. Se si digita exit per uscire dalla subshell ed eseguito echo $ dog, verrà nuovamente visualizzata la parola maisie. Vale anche la pena pensare al comportamento delle variabili globali all'interno di una shell. Iniziare in una nuova finestra di terminale e digitare quanto segue: esportazione dog = maisieecho $ dog Come ci si aspetterebbe, viene visualizzata la parola maisie. Ora apri una subshell e digita di nuovo echo $ dog. Questa volta vedrai che la parola maisie viene visualizzata anche se sei in una sottotitola. Il motivo è che il comando export ha reso globale la variabile $ dog. La modifica della variabile $ dog all'interno della sottoshell anche se si utilizza il comando export non ha alcun effetto sulle sue shell padre. Spero che da questo si possa vedere che conoscere il livello di shell in cui si sta lavorando ha un certo significato quando si scrivono degli script. Gli esempi che ho dato sono molto semplicistici, ma è abbastanza comune per uno script di shell chiamare un altro script di shell che a sua volta chiama un altro script di shell che tutti ora stanno eseguendo a diversi livelli. Conoscere il livello della shell può essere molto importante.