Abordagem geral com ps
Você precisa investigar se o processo pai do shell é vim
. Isso funciona no meu Debian 9:
pid=1234 # specify PID of the shell in question
ps -o comm= "$(ps -o ppid= "$pid")"
onde ps -o ppid= "$pid"
retorna o ID do processo pai. Note que se não houver um processo com PID de $pid
, o comando inteiro se tornará ps -o comm= ""
inválido e causará um erro.
Isso pressupõe que você conhece o PID certo. Por exemplo, você pode iterar sobre a saída de pidof bash
:
for pid in $(pidof bash); do ps -o comm= "$(ps -o ppid= "$pid")" 2>/dev/null; done
De dentro da própria casca
Dentro do próprio shell o PID direito é $$
, então o acima simplifica para
ps -o comm= "$(ps -o ppid= "$$")" # non-optimal though, see below
Mas também existe $PPID
. Ele é configurado pelo shell para o valor de seu ID do processo pai durante a inicialização do shell. Portanto, isso deve ser quase equivalente:
ps -o comm= "$PPID"
Quase, porque em geral, se o processo pai morre e o shell sobrevive (isso é possível), o shell órfão receberá um novo pai. Isso será refletido, ps -o ppid= "$$"
mas não por echo "$PPID"
, eu acho. No seu caso, a discrepância não deve importar, porque:
- Se a casca sobreviver, apesar das duas abordagens produzirem resultados diferentes, nenhum dos resultados será
vim
, então a conclusão final será "não um terminal vim" de qualquer maneira.
- Espero
vim
matar os shells iniciados :terminal
quando sai (não posso confirmar isso no momento), então o ponto acima é irrelevante.
- Espero que qualquer shell interativo saia sozinho quando perder seu terminal de controle; por isso, mesmo que a expectativa anterior esteja errada ou apenas
vim
seja morta com força (por isso não pode enviar sinais para os seus filhos), a shell irá sair de qualquer forma. Portanto, os pontos acima são irrelevantes.
Portanto, acho que é seguro assumir que as abordagens com e sem $PPID
são equivalentes na prática.
Note, dependendo da sua configuração e de como você começou vim
, ps -o comm= ...
pode não retornar a vim
string literal . Por exemplo, pode ser vim.basic
, vim.gtk3
ou qualquer outra coisa.