Como descobrir se o shell atual foi carregado por outro shell?

3

Quando estou em um terminal, e digito /bin/bash , que inicia outro shell bash, certo?

É possível descobrir, através de algum comando, se o shell bash atual foi iniciado a partir de outro shell bash?

Além disso, quais são as implicações de iniciar um shell dentro de outro? (ou não importa)

    
por Zabba 02.05.2011 / 19:16

3 respostas

3

Com este comando, você pode ver o processo pai do shell atual:

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

Isso funciona em bash onde PPID variable está definida, não sei em outras shells.

EDITAR

Como @bmk notou, o echo é um exagero e não é necessário:

ps -o comm= -p $PPID
    
por enzotib 02.05.2011 / 19:25
4

Uma versão que também funciona com shells diferentes de bash é:

ps -p 'ps h -p $$ -o ppid' -o comm=
    
por bmk 02.05.2011 / 19:31
0

bash realmente conta isso por meio de uma variável especial exportada SHLVL .

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

Se SHLVL é 2, não significa necessariamente que o processo pai seja bash, apenas significa que um dos ancestrais do shell também é bash, ou outro processo que exportou SHLVL (o ksh também configura isso, eu acho) .

Por que você precisa saber se o pai do seu shell é bash?

E não, não há realmente nenhuma implicação de executar um shell dentro de outro shell. É como executar qualquer outro comando em um shell.

    
por geirha 02.05.2011 / 22:31