我在 Pop-OS 上運行 Gnome! 20.04。
我正在使用terminator
和zsh
外殼。我只想在fortune
第一次在 X 會話中使用 zsh shell 時啟動。
我已經嘗試過這些事情.zshrc
:
### count the lines of
ps -ax | grep zsh
ps -ax | grep /zsh
###
[ -z "$(pidof zsh)" ] && fortune
PS:我很難找到適合這個問題的標籤
答案1
考慮到「每個 X 會話一次」的精確要求,儲存目前 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:)
請注意,這不是原子的。fortune
如果您幾乎同時啟動 zsh 實例,則可能會執行多次。
答案2
fortune
僅當沒有其他 zsh shell 運行時才會啟動:
[[ "$(pidof zsh)" == *' '* ]] || fortune