что делает этот следующий файл сценария bash?

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

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

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

Спасибо.

1
задан 23 October 2013 в 10:58

2 ответа

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

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

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

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

1
ответ дан 24 May 2018 в 16:21

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

Из 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) и работаете там.

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

1
ответ дан 24 May 2018 в 16:21

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

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