ps - hierarquia de processos
Quando comecei a usar o compterm um problema logo apareceu, às vezes eu esquecia que o compterm estava carregado. Daí a criei uma pequena função para detectar se eu estava em uma sessão carregada pelo compterm ou se era apenas uma sessão normal do zsh.
function is_parent_compterm {
local pid=$$
local parent_pid
while [ "$pid" -ne 1 ]; do
parent_pid=$(ps -p $pid -o ppid=)
parent_pid=${parent_pid//[[:blank:]]/} # Remove espaços
# Verifica se o nome do comando do processo pai é 'compterm'
if ps -p $parent_pid -o comm= | grep -q "^compterm$"; then
return 0 # Retorna true se encontrar 'compterm'
fi
pid=$parent_pid
done
return 1 # Retorna false se 'compterm' não for encontrado
}
Essa função verifica todos os processos parents do processo atual e se o nome de algum deles for compterm retorna true. Com isso consigo personalizar o prompt e assim sei se o compterm está carregado ou não.
if is_parent_compterm; then
PS1="%F{yellow}compterm%f%F{green}>%f "
fi
A versão mais nova do compterm não precisa de uma função tão complexa, ao ser carregado ele cria uma variável de ambiente com o PID do processo, então é fácil descobrir se é uma sessão do shell carregada pelo compterm ou não.
if [[ -v COMPTERM ]]; then
PS1="%F{yellow}compterm%f%F{green}>%f "
fi
A mesma ideia pode ser usada em outros scripts para saber, por exemplo, se está sendo executado sob o tmux ou não.