o que este seguinte arquivo de script bash faz?

2

enquanto navega pelos arquivos ocultos do meu diretório inicial, eu encontrei .bash_logout . Eu vim através deste conteúdo no arquivo

if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi

Eu não sou muito bom com BASH & amp; Eu estou pedindo isso, alguém poderia explicar isso para mim. o que é o negócio com SHLVL?

Obrigado.

    
por rɑːdʒɑ 23.10.2013 / 07:58

3 respostas

6

Esse script - .bash_logout - é executado por bash quando shell de login sai, e esse código da sua pergunta pretende limpar a tela para aumentar a privacidade ao sair do console.

SHLVL é uma variável de ambiente que vem de "SHell LeVeL" e permite que você acompanhe quantas sub-camadas estão no seu shell atual. Em seu shell de nível superior, o valor de $SHLV é 1. No primeiro subshell, é 2; em um sub-subshell, é 3; e assim por diante. Então, o SHLVL indica quantas camadas o usuário possui. Se o nível for 2, você deve digitar exit e, em seguida, logout para sair.

Então, se "$SHLVL" = 1 , ou seja, se você estiver no shell de nível superior, então ...

[ -x /usr/bin/clear_console ] é outro teste e significa algo como: teste se o arquivo /usr/bin/clear_console existe e é executável.

Por causa de && este comando: /usr/bin/clear_console -q é executado somente se [ -x /usr/bin/clear_console ] tiver sucesso com sucesso.

E finalmente: o que /usr/bin/clear_console significa? De man clear_console :

clear_console clears your console if this is possible.  It looks in the
environment for the terminal type and then in the terminfo database  to
figure  out  how  to  clear  the  screen.  To clear the buffer, it then
changes the foreground virtual terminal to another  terminal  and  then
back to the original terminal.

clear_console é muito aproximado do comando clear que pode ser usado em qualquer terminal / console.

    
por Radu Rădeanu 23.10.2013 / 08:38
1

De um google rápido, parece que o SHLVL equivale a "SHELL LeVeL" e reflete o quão profundo você é com shells aninhados. Ou seja uma concha, abre outra, que abre outra, etc.

Este valor é incrementado para cada sub-shell aberto, então o código está verificando se este é o nível superior do ninho - ou seja, nível 1.

se assim for, então (se / usr / bin / clear_console existir e for executável) execute o código para limpar a tela.

Extraído daqui: link

    
por FreudianSlip 23.10.2013 / 08:35
1

Se você quer apenas saber por que rolar para baixo.

De man bash

SHLVL  Incremented by one each time an instance of bash is started.

Mas, isso não é 100% claro ... Então vamos ver:

# echo $SHLVL
1
# ps faux
...
user    4440  0.0  0.9 599220 18796 ?        Sl   08:35   0:00 gnome-terminal
user    4447  0.0  0.2  31912  5304 pts/2    Ss+  08:35   0:00  \_ bash
...
#
# screen
# echo $SHLVL
2
# ps faux
...
user    4440  0.0  0.9 599220 18796 ?        Sl   08:35   0:00 gnome-terminal
user    4447  0.0  0.2  31920  5324 pts/2    Ss   08:35   0:00  \_ bash
user    4772  0.0  0.0  34656  1224 pts/2    S+   08:43   0:00      \_ screen
user    4773  0.0  0.0  34816  1396 ?        Ss   08:43   0:00          \_ SCREEN
user    4774  0.3  0.2  31952  5188 pts/3    Ss+  08:43   0:00              \_ /bin/bash
...
#
# bash
# echo $SHLVL
3
# ps faux
user    4440  0.0  0.9 599220 18796 ?        Sl   08:35   0:00 gnome-terminal
user    4447  0.0  0.2  31920  5324 pts/2    Ss   08:35   0:00  \_ bash
user    4772  0.0  0.0  34656  1224 pts/2    S+   08:43   0:00      \_ screen
user    4773  0.0  0.0  34816  1396 ?        Ss   08:43   0:00          \_ SCREEN
user    4774  0.1  0.2  31952  5348 pts/3    Ss   08:43   0:00              \_ /bin/bash
user    4832  1.3  0.2  31952  5184 pts/3    S+   08:45   0:00                  \_ bash

Portanto, a variável é incrementada toda vez que um bash é aninhado em outro bash. E seus efeitos de parte de código que quando o último bash está saindo da tela serão apagados. Mas ele não é executado em sessões de terminal gráficas, apenas em terminais virtuais (como quando você pressiona ctrl + alt + f1 ) e trabalha lá.

O motivo é que a próxima pessoa que trabalha nesse terminal virtual não pode ver a saída da última tela que você tinha. Porque talvez haja informações críticas na tela.

    
por chaos 23.10.2013 / 09:02