GNU/Linux >> Linux Esercitazione >  >> Linux

Perché $shlvl inizia al livello 2 nelle shell non di accesso ma al livello 1 nelle shell di accesso in Rhel 7?

Sto usando "Red Hat Enterprise Linux Server versione 7.1 (Maipo)".
Quando sono in una shell senza login, il livello minimo della shell (echo $SHLVL) inizia al livello minimo 2 e aumenta con il sub successivo -shells.
Ma quando utilizzo una shell di accesso, il livello minimo della shell (echo $SHLVL) inizia al livello minimo della shell 2 e aumenta con le subshell successive.

[Que.] Perché c'è una differenza nel livello minimo della shell tra la shell di accesso (inizia dal livello minimo della shell 1) e la shell non di accesso (inizia dal livello minimo della shell 2)?

Sto usando bash.

Risposta accettata:

Dalla pagina man di bash:

SHLVL Incrementato di uno ogni volta che viene avviata un'istanza di bash.

Come vedi, questa variabile non è correlata al fatto che si tratti di una shell di accesso o meno. Significa solo che la tua shell bash è stata avviata da un'altra shell bash. Dal momento che non sappiamo esattamente cosa stai facendo per ottenere la tua shell, non posso dire perché hai una chiamata di shell nidificata, ma qui ci sono alcuni casi comuni:

  • Stai avviando una nuova finestra di terminale dalla riga di comando

  • Stai utilizzando alcune funzionalità del sistema operativo per avviare una nuova finestra di terminale e questa funzionalità viene implementata avviando prima un bash che quindi esegue il terminale che a sua volta esegue una nuova shell

  • Hai un bash ricorsivo chiama nel tuo .bash_profile che viene eseguito ogni volta che SHLVL è uguale a 1 (sembra strano, ma l'ho visto già due volte!)


Linux
  1. Qual è la lettura del file di configurazione tra login e shell non di accesso?

  2. Perché Bashrc controlla se la shell corrente è interattiva?

  3. Perché le shell interattive sulle shell di accesso Osx sono predefinite?

  4. Perché nessuno usa la vera shell Bourne come /bin/sh?

  5. Perché `zip` in un ciclo For funziona quando il file esiste, ma non quando non lo è?

Qual è la differenza tra Login e Non-Login Shell

Perché il documento Parent Shell Here non funziona per il sottocomando in Dash ma Bash funziona?

Perché questo "durante la lettura" funziona in un terminale, ma non in uno script di shell?

Perché la Regex in Bash funziona solo se è una variabile e non direttamente??

Perché un Lun World Wide ID inizia con il numero 3 in Linux dm-multipath

`ssh <host>` è una shell di login, ma `ssh <host> <comando>` non lo è?