при просмотре скрытых файлов моего домашнего каталога я обнаружил .bash_logout
. Я нашел это содержимое в файле
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
Я не очень хорошо разбираюсь в BASH & amp; Я прошу это, кто-нибудь может объяснить это для меня. что за сделка с SHLVL?
Спасибо.
Тот сценарий - .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
команда, которая может использоваться в любом терминале/консоли.
Из быстрого гугла кажется, что SHLVL приравнивается к «SHell LeVeL» и отражает, насколько глубоко вы находитесь с вложенными оболочками. То есть одна оболочка, открывает другую, которая открывает другую и т. д.
Это значение увеличивается для каждой открытой вложенной оболочки, поэтому код проверяет, является ли это верхним уровнем гнезда, т.е. уровнем 1.
Если это так, то он (если / usr / bin / clear_console существует и является исполняемым) запускает код для очистки экрана.
Взято отсюда: http://linux.about.com/cs/linux101/g/shlvl.htm
Если вы просто хотите знать, почему прокрутите вниз.
Из 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 kbd> + alt kbd> + f1 kbd>) и работаете там.
Причина в том, что следующий человек, который работает на этом виртуальном терминале, не может видеть вывод последнего экрана, который у вас был. Потому что, возможно, на экране есть важная информация.