Переменная среды $SHLVL
содержит «глубину» оболочки.
echo $SHLVL
Глубину оболочки также можно определить с помощью pstree
(версия 23 и выше):
pstree -s $$ | grep sh- -o | wc -l
Я нашел второй способ более надежным, чем первый, значение которого было сброшено при использовании sudo
или стало ненадежным при env -i
.
Ни один из них не может правильно справиться с su
.
Информация может быть доступна в вашем запросе:
PS1='\u@\h/${SHLVL} \w \$ '
PS1='\u@\h/$(pstree -s $$ | grep sh- -o | tail +2 | wc -l) \w \$ '
| tail +2
предназначен для удаления одной строки из вывода grep
.Поскольку мы используем конвейер внутри подстановки команды "$(...)
", оболочке необходимо вызвать под-оболочку, поэтому pstree сообщает об этом, и grep обнаруживает еще один уровень sh-
.
InВ дистрибутивах Debian pstree
является частью пакета psmisc
.Возможно, он не установлен по умолчанию в дистрибутивах, отличных от настольных.