Estou executando o Gnome no Pop-OS! 20.04.
Estou usando terminator
e zsh
shell. Quero iniciar fortune
apenas na primeira vez que usar o zsh shell em uma sessão X.
Eu tentei esse tipo de coisa em .zshrc
:
### count the lines of
ps -ax | grep zsh
ps -ax | grep /zsh
###
[ -z "$(pidof zsh)" ] && fortune
PS: Tive dificuldade em encontrar tags apropriadas para esta pergunta
Responder1
Dado o requisito preciso “uma vez por sessão X”, o local mais natural para armazenar a informação de que isso já foi feito na sessão X atual é no estado do servidor X. Não existe realmente um local pretendido para dados globais personalizados em um servidor X, mas há um local para configuração global personalizada que pode ser alterada a qualquer momento, o que é próximo o suficiente para o propósito aqui:Recursos X. A ferramenta de linha de comando para manipular recursos X éxrdb
.
Cuidado, isso xrdb
é peculiar e a implementação do X.org tem bugs extremamente antigos. Você provavelmente não deseja usar xrdb -load
(que remove todas as configurações carregadas anteriormente conforme documentado) ou xrdb -remove
(que remove todas as configurações carregadas anteriormente, ao contrário do que deveria fazer).
Código não testado para o seu .zshrc
:
if [[ -n ${DISPLAY:+set} ]] && whence xrdb >/dev/null; then
if xrdb -query | grep -q '^pietrodito\.session\.ran-fortune:.*true'; then
fortune
xrdb -merge <<<'pietrodito.session.ran-fortune: true'
fi
fi
Para desativar a opção de teste:
xrdb -load <(xrdb -query | grep -v '^pietrodito\.session\.ran-fortune:)
Observe que isso não é atômico. fortune
pode ser executado várias vezes se você iniciar instâncias zsh quase exatamente ao mesmo tempo.
Responder2
Este será iniciado fortune
apenas se não houver outro shell zsh em execução:
[[ "$(pidof zsh)" == *' '* ]] || fortune