Как узнать, была ли текущая оболочка загружена другой оболочкой?

Когда я нахожусь в терминале и набираю /bin/bash, запускается еще одна оболочка bash, верно?

Можно ли с помощью какой-либо команды узнать, была ли текущая оболочка bash запускается из другой оболочки bash?

Кроме того, каковы последствия запуска оболочки внутри другой? (или это не имеет значения)

3
задан 2 May 2011 в 21:16

3 ответа

С этой командой Вы видите родительский процесс текущей оболочки:

ps -o comm= -p $(echo $PPID)

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

Править

Как @bmk замеченный, echo материал является излишеством и не необходимый:

ps -o comm= -p $PPID
3
ответ дан 2 May 2011 в 21:16

Версия, которая также работает с оболочками, отличными от bash:

ps -p `ps h -p $ -o ppid` -o comm=
0
ответ дан 2 May 2011 в 21:16

bash действительно считает это через специальную экспортируемую переменную SHLVL.

$ echo "$SHLVL"
1
$ bash -c 'echo "$SHLVL"'
2

Если SHLVL равен 2, это не обязательно означает, что родительский процесс является bash, это просто означает, что один из предков оболочки также является bash, или другой процесс, который экспортировал SHLVL (ksh устанавливает его Я думаю).

Почему вам нужно знать, является ли родительский объект вашей оболочки bash?

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

0
ответ дан 2 May 2011 в 21:16

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

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