что делает следующий файл скрипта bash?

при просмотре скрытых файлов моего домашнего каталога я обнаружил .bash_logout. Я нашел это содержимое в файле

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

Я не очень хорошо разбираюсь в BASH & amp; Я прошу это, кто-нибудь может объяснить это для меня. что за сделка с SHLVL?

Спасибо.

3
задан 23 October 2013 в 09:58

3 ответа

Тот сценарий - .bash_logout - выполняется ударом, когда оболочка входа в систему выходит, и тот код от Вашего вопроса намеревается очистить экран для увеличения конфиденциальности при отъезде консоли.

SHLVL переменная среды, которая прибыла из "УРОВНЯ Оболочки" и позволяет Вам отследить, сколько подоболочек глубоко Ваша текущая оболочка. В Вашей оболочке верхнего уровня, значении $SHLV 1. В первой подоболочке это 2; в подподоболочке это 3; и так далее. Таким образом, SHLVL указывает, сколько оболочек глубоко пользователь. Если уровень равняется 2, необходимо ввести exit, затем logout выходить.

Так, если "$SHLVL" = 1 т.е. если Вы находитесь в оболочке верхнего уровня, затем...

[ -x /usr/bin/clear_console ] другой тест и означает что-то как: протестируйте если файл /usr/bin/clear_console существует и исполняемый файл.

Из-за && эта команда: /usr/bin/clear_console -q выполняется только если [ -x /usr/bin/clear_console ] успешно выполнитесь с успехом.

И наконец: что /usr/bin/clear_console средства? От 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 к очень приближаются clear команда, которая может использоваться в любом терминале/консоли.

7
ответ дан 23 October 2013 в 09:58

Из быстрого гугла кажется, что SHLVL приравнивается к «SHell LeVeL» и отражает, насколько глубоко вы находитесь с вложенными оболочками. То есть одна оболочка, открывает другую, которая открывает другую и т. д.

Это значение увеличивается для каждой открытой вложенной оболочки, поэтому код проверяет, является ли это верхним уровнем гнезда, т.е. уровнем 1.

Если это так, то он (если / usr / bin / clear_console существует и является исполняемым) запускает код для очистки экрана.

Взято отсюда: http://linux.about.com/cs/linux101/g/shlvl.htm

0
ответ дан 23 October 2013 в 09:58

Если вы просто хотите знать, почему прокрутите вниз.

Из man bash

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

Но это не на 100% ясно ... Итак, давайте посмотрим:

# 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

Таким образом, переменная увеличивается каждый раз, когда bash вложен в другой баш. И ваша часть кода влияет на то, что когда последний bash выходит из экрана, он будет очищен. Но он не был выполнен в сеансах графического терминала, только в виртуальных терминалах (например, когда вы нажимаете ctrl + alt + f1 ) и работаете там.

Причина в том, что следующий человек, который работает на этом виртуальном терминале, не может видеть вывод последнего экрана, который у вас был. Потому что, возможно, на экране есть важная информация.

0
ответ дан 23 October 2013 в 09:58

Другие вопросы по тегам:

Похожие вопросы: