Pop-OS! 20.04 で Gnome を実行しています。
私はシェルterminator
を使用しています。Xセッションで zsh シェルを初めて使用するときにのみzsh
起動したいです。fortune
私は次のようなことを試しました.zshrc
:
### count the lines of
ps -ax | grep zsh
ps -ax | grep /zsh
###
[ -z "$(pidof zsh)" ] && fortune
追記:この質問に適切なタグを見つけるのに苦労しました
答え1
「X セッションごとに 1 回」という正確な要件を考えると、現在の X セッションで既に実行されたという情報を保存する最も自然な場所は、X サーバーの状態です。X サーバーにはカスタム グローバル データを格納するための場所はありませんが、いつでも変更できるカスタム グローバル構成を格納する場所はあります。これは、ここでの目的には十分です。X リソースXリソースを操作するためのコマンドラインツールはxrdb
。
これはxrdb
奇妙であり、X.org の実装には非常に長年のバグがあることに注意してください。おそらく、xrdb -load
(ドキュメントに記載されているように、以前に読み込まれたすべての構成を削除します) やxrdb -remove
(本来の動作とは異なり、以前に読み込まれたすべての構成を削除します) は使用したくないでしょう。
未テストのコード.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
テストのオプションを設定解除するには:
xrdb -load <(xrdb -query | grep -v '^pietrodito\.session\.ran-fortune:)
これはアトミックではないことに注意してください。zshfortune
インスタンスをほぼ同時に起動すると、複数回実行される可能性があります。
答え2
これはfortune
、他の zsh シェルが実行されていない場合にのみ起動します。
[[ "$(pidof zsh)" == *' '* ]] || fortune