Ich verwende Gnome auf Pop-OS! 20.04.
Ich verwende terminator
eine Shell. Ich möchte sie nur beim ersten Mal zsh
starten, wenn ich die ZSH-Shell in einer X-Sitzung verwende.fortune
Ich habe solche Dinge ausprobiert in .zshrc
:
### count the lines of
ps -ax | grep zsh
ps -ax | grep /zsh
###
[ -z "$(pidof zsh)" ] && fortune
PS: Es fiel mir schwer, passende Tags für diese Frage zu finden
Antwort1
Angesichts der präzisen Anforderung „einmal pro X-Sitzung“ ist der Status des X-Servers der natürlichste Ort, um die Information zu speichern, dass dies bereits in der aktuellen X-Sitzung geschehen ist. Es gibt auf einem X-Server keinen wirklich vorgesehenen Ort für benutzerdefinierte globale Daten, aber es gibt einen Ort für benutzerdefinierte globale Konfigurationen, die jederzeit geändert werden können und der für diesen Zweck nahe genug ist:X RessourcenDas Kommandozeilentool zur Manipulation von X-Ressourcen istxrdb
.
Beachten Sie, dass dies xrdb
eigenartig ist und die X.org-Implementierung extrem lange bestehende Fehler aufweist. Sie möchten wahrscheinlich nicht verwenden xrdb -load
(das alle zuvor geladenen Konfigurationen wie dokumentiert entfernt) oder xrdb -remove
(das alle zuvor geladenen Konfigurationen entfernt, anders als es eigentlich tun soll).
Ungetesteter Code für Ihr .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
So deaktivieren Sie die Option zum Testen:
xrdb -load <(xrdb -query | grep -v '^pietrodito\.session\.ran-fortune:)
Beachten Sie, dass dies nicht atomar ist. fortune
Es kann mehrere Male ausgeführt werden, wenn Sie Zsh-Instanzen fast genau zur gleichen Zeit starten.
Antwort2
Dieses wird fortune
nur gestartet, wenn keine andere ZSH-Shell ausgeführt wird:
[[ "$(pidof zsh)" == *' '* ]] || fortune