Você pode verificar se o processo pai é o shell. Por exemplo:
#! /bin/bash
if [[ $(readlink -f /proc/$(ps -o ppid:1= -p $$)/exe) != $(readlink -f "$SHELL") ]]
then
echo "Starting the shell..."
exec "$SHELL"
else
echo "Not starting a shell."
fi
ps -o ppid:1= -p $$
imprime o PID do processo pai ( ppid
) do processo atual ( -p $$
). Um readlink
on /proc/<pid>/exe
deve imprimir o caminho para o executável, que seria o shell se você o executasse em um shell, ou qualquer outra coisa diferente.
Outra possibilidade é a variável SHLVL
, que indica como aninhada a atual instância da shell. Se executado em um shell, o script deve ter SHLVL
2 ou maior. Quando executado clicando duas vezes ou a partir de um iniciador de área de trabalho, deve ser 1:
#! /bin/bash
if (( SHLVL > 1 ))
then
echo "Starting the shell..."
exec "$SHELL"
else
echo "Not starting a shell."
fi